550 Bad HELO - ホストがホスト名を偽装しています

Discourse のセットアップ後、Bad HELO エラーが発生しています。

調査したところ、場合によってはリバーシ DNS がホスト名と一致しないことが問題の原因となるようです。

私の場合、設定は共有 DirectAdmin サーバー上のメールサーバーのホスト名を使用しており、Discourse をホスト名ドメインとは異なるドメインでセットアップしています。

  DISCOURSE_SMTP_ADDRESS: mail.example.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: discourse@example.com
  DISCOURSE_SMTP_PASSWORD: "my_password_without_hash"
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (オプション、デフォルトは true)
  DISCOURSE_SMTP_DOMAIN: 20.example.org # DirectAdmin のドメインが私のドメインと異なる点に注意
  DISCOURSE_NOTIFICATION_EMAIL: noreply@example.com

おそらく、リバーシ DNS エントリが一致していないことが問題となっているでしょう。例えば、IP アドレスから接続して EHLO domainname.com と宣言すると、受信サーバーはその IP に対してリバーシルックアップを行い、www.domainname.com という結果を得ます。これは完全な一致ではないため、サーバーがエラーを報告したり拒否したりします。これは SMTP 仕様の違反ではありませんが、一般的なスパム対策およびなりすまし防止の慣行です。

PHPMailer はデフォルトで From アドレスから SMTP エンベロープ送信者アドレスを導出しますが、Hostname プロパティ(Host とは異なります)を使用して上書きできます。例えば:

$mail->From = 'user@domainname.com';
$mail->Hostname = 'www.domainname.com';
https://github.com/PHPMailer/PHPMailer/issues/1095
dig -x your.ip.number

はあなたのホスト名を表示しますか?

こんにちは、Jay さん。

Discourse では、まだ返信にリンクを投稿することができません。そのため、句点の代わりにドットを使って返信します。これで分かりやすくなることを願っています。

はい、Discourse が稼働している VPS に対してこのコマンドを実行すると、Discourse が動作しているホスト名(例:discourse dot example dot com)が返ってきます。

一方、メールサーバーがある共有サーバーに対して実行すると、そのサーバーのホスト名(例:above 20 dot example dot org)が返ってきます。example dot com ではありません。技術的には example dot com は共有サーバーの IP に解決されますが、共有サーバーには別のホスト名(20 dot example dot org)が設定されています。