PHPスクリプトからメールを配信すると、
deferral: Sorry,_I_wasn't_able_to_establish_an_SMTP_connection._(#4.4.1)
となりメールキューに内にメッセージが溜まってしまい、一行に配信されません。
そこで、以下を実行すると、配信されます。
kill -ALRM pid
配信エラーになる考えられる原因、また回避方法を教えてください。
まずは原因を探ります。以下をご確認ください。
#1のコメントについて確認ですが――
kill -ALRM コマンドで送信できないメールアドレスのドメイン対して同様のエラーが出ます。
つまり、kill -ALRM を実行したとしても、あるドメインに対してはメールが送信できない(相手側で受信していない)ということですね。
次の確認事項です。
kill -ALRM を実行したとしても、あるドメインに対してはメールが送信できない(相手側で受信していない)
→その通りです。
以下、確認事項につての回答です
1.当方、静的IPアドレスでの運用ですのでInbound Port 25 Blockingによってブロックされることはないと思われます。
また、DNSの逆引きも設定しております。他の拒否方法については確認できていません。
2.sfMail(PHPMailer)です。
3.「failure notice」メールが返ってきたときの処理はしておりません。
通信経路がクリアで、セキュリティ設定も無いとすると、おそらく相手の受信サーバが死んでいます。
DNSで引けても相手が死んでいる可能性があるので、pingを打ってみてください。
qmail-send は単純にSMTP送信するだけのようなので、あらかじめサーバの生存確認をしてからメールを発信した方が良いかもしれません。
qmail をハングアップさせないための対症療法としては、キューの生存時間を短くする方法が考えられます。
具体的な手順は、「メッセージがキューにとどまる期間を指定したい」をご覧下さい。
なお、いままで何度も kill しているとすると、キューが溜まりっぱなしになっており、それもハングアップの原因になっているかもしれません。
「メッセージがキューにとどまる期間を指定したい」
は大変参考になりました。
問題は「相手サーバが生きているにも関わらずSMTP接続できないこと」なのですが、
以下のようなフローで
PHP送信スクリプト実行→キューに溜まる→qmail-sendより送信→SMTP接続エラー→kill -ALRMで送信→送信される
qmail-sendからだとSMTP接続エラーになり、kill -ALRMで送信完了されるのはどのような理由でしょうか?
1.について
kill -ALRM コマンドで配信できるものについては正しいです。
2.について
kill -ALRM コマンドで送信できないメールアドレスのドメイン対して同様のエラーが出ます。
3.について
当方、専用サーバでの運用ですが、設定しておりません。
4.について
ブロックしていません。
5.について
落としています。
現在kill -ALRM コマンドを定期的に実行しているのですが、kill -ALRM コマンドを実行しなくても配信されるようにする方法を教えてください。