特定の環境からメールを送信できなかった

ThunderBirdを使うと自社のメールサーバーを使ってメールが送信できなかったお話。

経緯

OSX標準のメール.appでは問題ないんだけどThunerBirdからだとエラーで送信できない。と言われたので調査して暫定の対応した。

調査

ログを確認すると、

Helo command rejected: need fully-qualified hostname; 

のエラーが発生していた。 また、気になった点として

Received: from MacBook-Air.local ...

のように送信側のマシンのhostnameっぽいものが表示されていた。

/etc/postfix/main.cfの設定を確認すると

smtpd_helo_restrictions =
        permit_mynetworks,
        reject_invalid_helo_hostname,
        reject_unknown_hostname,
        permit

としていた。

暫定対応

smtpd_helo_required = yes
#smtpd_helo_restrictions =
#       permit_mynetworks,
#        reject_invalid_helo_hostname,
#        reject_unknown_hostname,
#        permit

に変更し、EHLO/HELOコマンドは要求するが、その中身のチェックを行わないようにし、メールが送信ができることを確認した。

本来ならば、こんな適当な対応ではなく、smtp_helo_nameにMTAのホスト名を設定すべきなんでしょう。 次に設定を触れるときに試す。

参考

gihyo.jp

その他

メール.appから送ったもののヘッダーを確認すると、

Received: from [<マシンのプライベートアドレス>] …

となっているがThunderBirdだとhostnameが使われている理由がいまいちわからなかったので調べたら設定で変更可能らしい。

Replace IP address with name in headers - MozillaZine Knowledge Base

ThunderBird -> 環境設定 -> 詳細 -> 設定エディタ

f:id:ebifly10:20160330235920p:plain

about:configですね。

smtpserverで検索

f:id:ebifly10:20160331000100p:plain

smtp1の1の部分は1番目の設定とかそんなノリ。

右クリックで 新規作成 -> 文字列で設定名に

mail.smtpserver.smtp1.hello_argument

値は任意のもの…なんだけど名前解決できるのにすればいいんじゃないでしょうか。何も考えずにlocalhostにしましたが。

これに変更後にメールを送ってヘッダーを見ると

Received: from localhost …

やったぜ。