После настройки 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, а принимающий сервер выполняет обратный запрос и находит www.domainname.com, что не является точным совпадением, поэтому он выдает ошибку или отклоняет соединение. Это не нарушение спецификации SMTP, но это распространённая практика борьбы со спамом и подделкой.
PHPMailer по умолчанию выводит адрес отправителя SMTP-конверта из адреса From, но вы можете переопределить это, используя свойство Hostname (это не то же самое, что Host), например:
$mail->From = 'user@domainname.com';
$mail->Hostname = 'www.domainname.com';
https://github.com/PHPMailer/PHPMailer/issues/1095