450 Helo command rejected

2010/07/16
★★★

sendmail でスマートホストを設定し、メールを送信した際に以下のエラーが発生した。

stat=Deferred: 450 <localhost.localdomain>: Helo command rejected: Host not found

調査したところ、スマートホスト側で、reject_unknown_hostname が設定されていると推察され、SMTP の HELO コマンドで、名前解決のできないホスト名が指定された場合に送信が拒否されているようだ。

sendmail のデフォルトの設定では、ホスト名として、"$j" マクロが使用される。
以下は、テストモードで "$j" マクロを実行したところ。

[root@centkun ~]# sendmail -bt -C/etc/mail/sendmail.cf
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter <ruleset> <address>
> $j
localhost.localdomain

$j マクロは、"/etc/sysconfig/network" の HOSTNAME を参照するので、HOSTNAME をグローバルで名前解決可能なホスト名に変更してやればよいのだが、メールサーバーの外部名と内部名には異なるホスト名を付与したいため、明示的にグローバルのメールサーバー名を定義することとした。

[root@centkun ~]# vi /etc/mail/sendmail.mc

明示的にグローバルのメールサーバー名 "mail002.masudaq.com" を定義するため、以下の行を追加する。

define(`confDOMAIN_NAME', `mail002.masudaq.com')dnl

設定を保存し、sendmail を再起動する。(最近、気付いたことだが、sendmail.cf の生成は、再起動時に自動的に行われる)。

[root@centkun ~]# /etc/init.d/sendmail restart

sendmail 再起動後、スマートホスト経由で、メールが正しく送信されることを確認する。

以下は、調査時に参考にしたサイト。