人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

qmailでのメール配信についての質問です。

PHPスクリプトからメールを配信すると、
deferral: Sorry,_I_wasn't_able_to_establish_an_SMTP_connection._(#4.4.1)

となりメールキューに内にメッセージが溜まってしまい、一行に配信されません。
そこで、以下を実行すると、配信されます。

kill -ALRM pid

配信エラーになる考えられる原因、また回避方法を教えてください。


●質問者: uniom
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:PHP qmail なりメ エラー キュー
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● pahoo
●23ポイント

まずは原因を探ります。以下をご確認ください。

  1. 正しいメールアドレスを指定していますか?(他のメーラーで送信可能なアドレスですか?)
  2. 特定のドメイン(メールサーバ)に対してエラーが出るということはありませんか?
  3. ご利用のプロバイダ、またはPHPが動作しているレンタルサーバでOutbound Port 25 Blockingを実施していませんか?
  4. FireWall(含・iptable)の設定でブロックされていませんか?
  5. sendmailが生きていませんか?
◎質問者からの返答

1.について

kill -ALRM コマンドで配信できるものについては正しいです。

2.について

kill -ALRM コマンドで送信できないメールアドレスのドメイン対して同様のエラーが出ます。

3.について

当方、専用サーバでの運用ですが、設定しておりません。

4.について

ブロックしていません。

5.について

落としています。

現在kill -ALRM コマンドを定期的に実行しているのですが、kill -ALRM コマンドを実行しなくても配信されるようにする方法を教えてください。


2 ● skipsstep
●23ポイント

smtpと接続できていません。http://hatena

◎質問者からの返答

smtp接続できるようにする方法を教えてください。


3 ● pahoo
●22ポイント

#1のコメントについて確認ですが――

kill -ALRM コマンドで送信できないメールアドレスのドメイン対して同様のエラーが出ます。

つまり、kill -ALRM を実行したとしても、あるドメインに対してはメールが送信できない(相手側で受信していない)ということですね。


次の確認事項です。

  1. 先方が、貴サイトからの配信を拒否していませんか? たとえば、先方がInbound Port 25 Blockingを実施しているということはありませんか?
  2. メール送信関数は何を使っていますか?(例:mail, mb_send_mail, PEAR::Mail)
  3. メール送信時にエラートラップをかけていますか?
◎質問者からの返答

kill -ALRM を実行したとしても、あるドメインに対してはメールが送信できない(相手側で受信していない)

→その通りです。


以下、確認事項につての回答です

1.当方、静的IPアドレスでの運用ですのでInbound Port 25 Blockingによってブロックされることはないと思われます。

また、DNSの逆引きも設定しております。他の拒否方法については確認できていません。

2.sfMail(PHPMailer)です。

3.「failure notice」メールが返ってきたときの処理はしておりません。


4 ● pahoo
●22ポイント

通信経路がクリアで、セキュリティ設定も無いとすると、おそらく相手の受信サーバが死んでいます。

DNSで引けても相手が死んでいる可能性があるので、pingを打ってみてください。


qmail-send は単純にSMTP送信するだけのようなので、あらかじめサーバの生存確認をしてからメールを発信した方が良いかもしれません。


qmail をハングアップさせないための対症療法としては、キューの生存時間を短くする方法が考えられます。

具体的な手順は、「メッセージがキューにとどまる期間を指定したい」をご覧下さい。


なお、いままで何度も kill しているとすると、キューが溜まりっぱなしになっており、それもハングアップの原因になっているかもしれません。

◎質問者からの返答

「メッセージがキューにとどまる期間を指定したい」

は大変参考になりました。


問題は「相手サーバが生きているにも関わらずSMTP接続できないこと」なのですが、

以下のようなフローで

PHP送信スクリプト実行→キューに溜まる→qmail-sendより送信→SMTP接続エラー→kill -ALRMで送信→送信される


qmail-sendからだとSMTP接続エラーになり、kill -ALRMで送信完了されるのはどのような理由でしょうか?


5 ● pahoo
●10ポイント

#4のコメント

qmail-sendからだとSMTP接続エラーになり、kill -ALRMで送信完了される

「kill -ALRM を実行したとしても、あるドメインに対してはメールが送信できない」ということですから、送信完了できていないのではないでしょうか。

もしくは、kill -ALRM で送信完了したように見えても、キューに送信できないドメインのメールが残っているのではないでしょうか。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ