DNSの問題がある電子メールアドレスに送信しようとすると、sendmailDNSタイムアウト期間に問題があります。問題のあるメールアドレスが[email protected]だとしましょう
次を使用して、このドメインにDNSの問題があることがわかります。
>Host -t mx example.com
;; connection timed out; no servers could be reached
次を使用して、問題のある電子メールアドレスへのsendmail呼び出しをテストして時間を計ることができます。
> time echo "This is a test message" | /usr/lib/sendmail [email protected] [email protected]
real 2m36.252s
user 0m0.004s
sys 0m0.005s
現在、sendmailがタイムアウトするまでに2分36秒かかります!これにより、このメールアドレスに送信しようとするPHP Webページがハングし、最終的にブラウザにエラーが返されます。
私の質問は:このタイムアウトを減らすにはどうすればよいですか?
Sendmailに関連するタイムアウト構成をいくつか見てきました。
> grep resolver /etc/mail/sendmail.cf
Timeout.resolver.retrans=5s
Timeout.resolver.retry=4
Sendmailは4回再試行するように設定されているようで、再送信ごとに5秒の遅延があります。
しかし、実際のDNSタイムアウト期間が見つかりませんか?
参考:これは、Red Hat Enterprise Linux Serverリリース5.2、sendmail 8.13.8、Linuxカーネル:2.6.18、Apacheバージョン:2.2.3、PHP =バージョン:5.3.0。注:この質問はフォローアップですfrom 一部のメールアドレスでSendmailの遅延
簡単な回避策として、/ etc /resolv.confをいじることができます。もちろん、これによりシステムリゾルバーの動作が変わります。これはsendmail固有の問題ではありません。
timeout: n
sets the amount of time the resolver will wait for a response from a remote name server before retrying the query via a different name server. Measured in seconds, the default is RES_TIMEOUT (see <resolv.h> ).
attempts: n
sets the number of times the resolver will send a query to its name servers before giving up and returning an error to the calling application. The default is RES_DFLRETRY (see <resolv.h> ).
長期的には、上記はあまり良い解決策ではありません。 DNSサーバーの設定が壊れているため、修正する必要があります。存在しないMX /ドメインに関するクエリがある場合、サーバーはNXDOMAINで迅速に応答する必要があります。一般に、多くのプログラム(初心者向けのsendmailだけでなく、通常はsshdやNFS)であらゆる種類の問題が発生するため、それほど長く待つべきではありません。