今どきのメール配信事情
メールサーバを構築するだけでメール配信ができる時代は、とうに終わっている。 もともとスパムメールはあったが、メールトラフィックの9割以上がスパムとなると、もはや手を打たないわけにはいかなくなった。 メールサーバの信頼性を求めるのは、必然とも言える動きだろう。
そこで、メールサーバを運用するうえでの要件をまとめてみた。 まず、既存システムを拡張することなくDNSへの設定のみでできることは、以下の①~③である。
- DNSで逆引きできること。
- MXレコードに登録されていること。
- SPFレコードに登録されていること。
ただ、それだけではスパムメールの大半を防ぐことができないので、SpamAssassinなどのスパムフィルターを利用しているメールサーバも多いと思う。
それらのメールサーバに対してメールを配信するには、以下の④~⑥も必要となる。
- RBLなどのブロックリストを利用する送信先には、ブロックリストに登録されていないこと。
- 一度に配信可能なメール件数以下で配信していること。
- スパムフィルターを利用する送信先には、スパムフィルターの条件をクリアしていること。
尚、送信元のメールサーバが上記をすべてクリアしていても、特に携帯メールでは、受信者がドメインやメールアドレスにより拒否するように設定していると、配信する事はできない。
携帯へメール配信するには
前節のメール配信事情を考慮して、実際に携帯へメール配信するには、以下の様なフローが必要となる。
説明資料
①特定接続サービスの契約
ドコモやソフトバンクでは、特定接続サービスを契約すると、一般に公開されているメールサーバとは異なるメールサーバを提供してくれる。
これにより、一般に公開されているメールサーバよりも若干ゆるい条件でメール配信が可能となる。
ただし、送信元のメールアドレスやIPアドレスなどの縛りがあるので、すべてのシステムで利用できるわけではないという点に注意が必要だ。
②メールサーバの準備
当然だが、メールサーバは必須。
③au向け送信アプリの準備
auのみ、特定接続サービスがない(そのようなサービスはないとauに言われたが、もしご存知の方がいたらご教示いただきたい。)ので、一般に公開されているメールサーバと同じ条件でフィルタリングされてしまう。
そのため、弊社では、送信件数と間隔を制御してメール配信をするアプリを作成した。(au向け送信アプリが必要な方は、連絡していただければ無償提供する。)
④DNSサーバの準備
こちらもメールサーバ同様、必須。とりあえず、現状ではIPv6に対応できていなくても大丈夫だと思うが、近い将来必要になるので、新規構築する際はIPv6対応可能なBind9などを利用したい。
⑤DNSサーバへのAレコードの登録
前述の「① DNSで逆引きできること。」への対応。
⑥DNSサーバへのMXレコードの登録
前述の「② MXレコードに登録されていること。」への対応。
⑦DNSサーバへのSPFレコードの登録
前述の「③ SPFレコードに登録されていること。」への対応。
⑧特定接続サービスの設定(メール転送)
使用してるMTAによって異なるが、いくつか例をあげると、sendmailであればmailertable、qmailであればsmtproutesでドコモやソフトバンクのドメインにて、転送設定を行う。
※ソフトバンクはドメインが多いので、漏れの無いように注意が必要。
⑨au向け送信アプリの設定
<p.弊社で作成したアプリの設定方法を書いても意味が無いので、どのようなアプリなのかを簡単に説明しよう。
まずメール配信希望者が、送信先と本文を記したメールを受付専用アドレスに送信する。
そのメールを基に受信アプリがデータをDBに格納し、デーモンとして起動している配信アプリが、あらかじめ設定した送信件数と間隔でメールを配信する、といった流れだ。(DMを送る際は重宝している。)
⑩~⑬各キャリアへのメール配信テスト
最近は、スマホや携帯、タブレット等、様々なデバイスがでてきたのはいいが、メーラーの仕様のせいか、メールを送信するアプリのせいか、はたまた、メールサーバのせいか、文字化けが多いので、テストの際は 特に考慮したい。せっかく配信できても読めないのではスパムメールも同然で、本末転倒だ。
⑭メールアドレスクリーニング
メール配信テストで、文字化けせず送信できたらOK、という訳ではない。
携帯メールでありがちなメールアドレスの変更などで発生する、送信できないメールアドレスを配信リストから削除しなければ、そのうち送信先のメールサーバから拒否される。
大量の宛先不明のメールは、スパムメールと同義に扱われるためだ。
この問題に弊社では、宛先不明だったメールアドレスをメールログからエラーコードで抽出して対応している。
これには削除対象の条件が重要となってくるが、例えば、1週間に複数日に及んで複数回のエラーが発生している場合 などを指定すれば、大半は問題ないだろう。