AWSでメール送信をしたく色々と試したのですが、
ことごとく迷惑メールフィルターに引っかかったので備忘録も含めて書いておきます。

●なんでAWSでメール送るとスパム扱いになるの?
どうもDNSの逆引きがAWS側の共有になってるみたい
逆引き設定を依頼すれば独自ドメインに当てられるんだけど、どうもこれだけじゃダメっぽい

ついでに書いておくとこの申請しておかないとAWS自身が送信にブロックかけてくるっぽいので、
まずはやっておいた方が良いです。

お次はSPFの設定をしてみた。
…が意味なし

お次はDKIMの設定をしてみるも…うまくいかん

その後も色々と試してみると特定の条件化で迷惑メール扱いになるらしい。
詳しく書いてこの条件が陳腐化すると対策されてしまいそうなので避けますが、
本文にNGワードというかNG条件があったみたいです。
胡散臭いワードとかでなく、ごくごくweb上では一般的に使う内容で引っかかるのは癪に障りますが…
もし、同じような状態にある人はメールの本文を削ってみたり送信元をユニークなものに変えてみたりしてください。

恐らくSEOと同じように各条件にマイナスポイントが割り振られており、累積マイナスポイントが一定値に達すると迷惑メールに入るのだと思われる。

AWSのIP範囲が多少マイナスポイントを持っており、それに加えてちょっとしたマイナスポイントが入った結果迷惑メールに引っかかったという感じでしょうか。

今回対策した結果から鑑みるにDKIMを設定すれば恐らく問題無いのではと思われます。

もしAWSからメールを送るなら、頑張ってメールの送信や内容の信頼性を高めるか素直にSESを使えという事かなー

tkht

Validationについて、単純な「必須チェック」や「文字数チェック」はできるんですが


「この項目が入っていた時、別のこの項目にも値がないとダメ」


といった、相関チェックが必要なケースって、やっぱりよくありますよね?


そんなん標準機能でないんかな~、ないなぁ~

という感じで調べてたら見つかったのが「カスタムValidation」。



簡単ではありますがその設定方法を残しておきます。


ざっくり手順:
◆src下(struts.xmlやlog4j.xmlとかあるところ)にvalidators.xmlを作成。

※xml内に標準的なvalidation(requireStringなど)もすべて含めないとダメらしい
※カスタムのクラスが存在しないなど、読めなかった場合はvalidationが全滅する(無効になる)ので注意

<validator name="required" ・・・とかです。


◆別途パッケージを作って(こちらではbiz.assets.admin.validator)任意のValidation用クラスを作成

(extends FieldValidatorSupport は必須)

今回はMyValidator.javaと命名することにします。


◆順番が前後してますが、Validation用クラス(MyValidator.java)ができたら

validators.xml内にカスタムValidationを定義します。

nameは適当でいいですが、後で指定しますので忘れないようにw


例:<validator name="myValidator" class="example.validator.MyValidator" />



◆abc(Action名)-validation.xmlにvalidators.xmlで定義した名前を組み込む
※今回はitem_nameという項目名(id)に対してmyValidator(validators.xmlで定義)を呼び出し


~一部抜粋~

<field name="item_name">
<field-validator type="myValidator">
<param name="secondFieldName">check_name</param>
<message>かすたむえらーです</message>
</field-validator>
</field>


paramについてですがMyValidator.java内で

secondFieldNameという変数を用意しgetter・setterを用意、

値取得対象の項目名を取得したら

Object secondValue = this.getFieldValue(secondFieldName, object);

で値を取ることができる感じです。


後の具体的なチェック処理はご自由に。


で、そのチェックに引っかかったら

addFieldError(fieldName, object);

でエラーオブジェクトに放り込んでおくこと。

そうしないとエラーなしという扱いになって処理が進んでしまいます。

(その他のエラーが無ければexecute()メソッドが実行される、という意味です)


◆で、アプリを実行してみるとValidationでMyValidator.javaを実行され、エラーになれば

Actionでinput扱いで返してくれる。



…という寸法です。



ちゃんと理解してる人ならあっという間にできてしまうんでしょうけど、

出来の悪い私にとっては内容を把握するまでに時間がかかります・・・orz



でも、これで内容は理解できたので、複雑なチェックでも対応はできるようになったと思います♪



mak-black.

サイトが重くなったりした時、どのURLの表示が遅いのかな?といった事を調べたい時ってないですか?


どうやらApacheのログで「処理時間」を残すことができるそうです。


httpd.confのLogFormatのところで・・・



LogFormat "%h %l %u %t "%r" %&gt;s %b "%{Referer}i" "%{User-Agent}i" %D" combined



という感じで「"%D"」とつけてあげればいいみたいです♪

再起動をお忘れなく~


ちなみに「%D」はマイクロ秒らしく、秒単位で見たい場合は「%T」でOKだそうです。

※試してみましたがほとんど0、たまに遅いときに1とかでしたww

ミリ秒くらいが一番いいかな??


ま、何かのお役にたてれば・・・


mak-black.