メール送信のリトライ(再送)について考えてみた


こんばんば、メールは何処に居たのかの回で初コメを頂きました、実はずーっとコメントが欲しかったりして、そんなたけけんです。

という事で、今回の内容は、どこに居たメールについての補足的な内容になってます。
きっかけがiptablesで弾いてた接続だったもんで

TCPの性質で繋がるまでやるって思ってましたが、SendmailにもPostfixにもリトライ機能があると。

 

という少ない前ふりですが、本題に入りましょう。
まずはメールが届かないという環境作りからやりませう。

 

とりあえず、送信ログを見る必要がある為、送信側にはこのサーバー使って、受信側には、ちょっと使い慣れていて、なおかつお試し期間があるさくらのレンタルサーバーを使って環境を作ってみました、が。
メールフィルタ機能を使った場合、送信は完了、届いたメールを迷惑メール用のフォルダに入るかそのまま破棄するという設定しかなく、送信側のログにはsendしかないという結果に、ボツ。
つぎにメールボックスをいっぱいにしてみたが、これもdaemonからエラーが返ってきてしまい再送にはならない為、ボツ。

 

やはり、どちらも管理権限がいるかなぁということで、候補にあがったのがKAGOYAクラウドの日額30円のものとServersMANの1ヶ月お試しありの月額500円のプラン。
さくらのVPSはお試し期間は25番を閉じているから、とりあえずスルー。

その他の候補としては、家のPCのVMwareからやろうと思ったが、IPを弾くとSSH接続がなぁ……
とも思ったがポートとIPで弾けばよかった。
ということで、お金をかけずに済むVMwareからやってみることにした。

送信側が自宅のVMware、受信側がVPSになります。

まずは自宅のIPをVPSのiptablesで制限します。
-A RH-Firewall-1-INPUT -s ... -p tcp –dport 25 -j DROP
こんな感じで追記します、コマンドは知りません……、ごめん。

さっそくVMwareから送信、ログの一部を載せて進めていきます。
Sep 15 18:36:05 stat=Sent (q8G1a53M003640 Message accepted for delivery)
Sep 15 18:38:05 stat=Deferred: Connection timed out with vincentina.net.
(Deferred: Connection timed out with vincentina.net.)
とまあ、一度は送ってみるもののタイムアウトしちゃったという内容になります。

Sep 15 19:36:22 stat=Deferred:
Sep 15 20:36:21 stat=Deferred:
Sep 15 21:36:21 stat=Deferred:
Sep 15 22:36:21  sender notify: Warning: could not send message for past 4 hours
こんな感じでデフォルトの設定通りに動いておりまして、1時間で再送を行い、4時間でまだ送信できていない場合は警告となっています。
おっと、まったく触れていなかったですがmailqコマンドでキューに残っている事を確認できます。

 

ざっくりとした内容になっていますが、statがSentでない場合はリトライの設定に従って再送されてるんだなという事が分かった(つもり)です。

今回はというか、前回も、iptablesでIPアドレスで接続拒否をするという形で制限をしているので、IPレベルでの制限?になるのかな。
結果的にSendmailのstatがdefferになって、送信される。

Deferrの原因がアプリケーションレベルの場合とか、TCPレベル、物理レベルの時にどうなるのかなぁって疑問もまだありますけど、送信サーバーが再送を行う必要があるケースに関しては、たけけんにはこれしか思いつかなかったです。
LANケーブルを抜いて試したらIP拒否と同じくTimeOutでしたわ。
柔らかい頭をお持ちの方は色々トライしてみてください。

 

KAGOYAの日額30円にはちょっと引かれるなぁ、30円で固定IPが使えるし、設定なんて毎回やればいいしね。
検証作業するにはよろしいのでは。
インスタンス削除で課金は止まるようです。

ServersMANの500円もいいなあ、スペックを考えるとさくらの新VPSかな。

うーん。

Similar Posts:


Leave a Reply

Your email address will not be published. Required fields are marked *