550 Bad HELO - Host impersonando hostname

Estou recebendo um erro Bad HELO após configurar o Discourse.

Fiz algumas investigações e descobri que isso pode ser um problema se o DNS reverso não corresponder ao nome do host em alguns casos.

No meu caso, minha configuração tem o nome do host do servidor de e-mail em um servidor DirectAdmin compartilhado, então estou configurando o Discourse em um domínio que difere do domínio do nome do host.

  DISCOURSE_SMTP_ADDRESS: mail.example.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: discourse@example.com
  DISCOURSE_SMTP_PASSWORD: "minha_senha_sem_hash"
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (opcional, padrão true)
  DISCOURSE_SMTP_DOMAIN: 20.example.org #note que o domínio do DirectAdmin difere do meu domínio.
  DISCOURSE_NOTIFICATION_EMAIL: noreply@example.com

É bem provável que o servidor esteja rejeitando porque sua entrada de DNS reverso não corresponde. Por exemplo, você se conecta de um IP e diz EHLO domainname.com; o servidor receptor faz uma consulta reversa nesse IP e encontra www.domainname.com, que não é uma correspondência exata, e por isso ele reclama/rejeita. Não é uma violação da especificação SMTP, mas é uma prática comum de anti-spam e anti-falsificação.

O PHPMailer, por padrão, deriva o endereço do remetente do envelope SMTP a partir do endereço From, mas você pode sobrescrevê-lo usando a propriedade Hostname (que não é a mesma coisa que Host), por exemplo:

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

O comando

  dig -x seu.ip.numero

mostra o nome do seu host?

Olá Jay,

O Discourse ainda não permite que eu publique links em uma resposta. Então, vou responder usando “dot” em vez de um ponto final. Espero que isso mantenha tudo claro.

Sim, quando executo esse comando contra o VPS onde o Discourse está hospedado, recebo o nome de host em que o Discourse está rodando, ou seja, discourse dot example dot com.

Se eu executar isso contra o servidor compartilhado (onde está o servidor de e-mail), recebo o nome de host dele, ou seja, above 20 dot example dot org. Não é example dot com. Tecnicamente, example dot com resolve para o IP do servidor compartilhado. Mas o servidor compartilhado tem outro nome de host (20 dot example dot org).