# 550 Bad HELO - 主机冒充主机名

**URL:** <https://meta.discourse.org/t/550-bad-helo-host-impersonating-hostname/195811>\
**Category:** Self-hosting\
**Created:** [2021年七月2日 21:32 UTC](https://meta.discourse.org/t/550-bad-helo-host-impersonating-hostname/195811 "2021-07-02T21:32:32Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Codes09](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codes09/32/215056_2.png) [@Codes09](https://meta.discourse.org/u/Codes09)\
**Post date:** [2021年七月2日 21:32 UTC](https://meta.discourse.org/t/550-bad-helo-host-impersonating-hostname/195811/1 "2021-07-02T21:32:32Z")

</div>

设置 Discourse 后，我遇到了 Bad HELO 错误。

我进行了一些排查，发现如果反向 DNS 与主机名不匹配，在某些情况下可能会出现此问题。

在我的情况下，由于邮件服务器主机名位于共享的 DirectAdmin 服务器上，而我正在一个与主机名域名不同的域名上设置 Discourse，因此出现了该问题。

```plaintext
  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](http://domainname.com)，接收服务器对该 IP 进行反向查找，发现的是 [www.domainname.com](http://www.domainname.com)，这与前者不完全匹配，因此会报错或拒绝连接。这并不违反 SMTP 规范，但属于常见的反垃圾邮件和反伪造做法。
> 
> PHPMailer 默认会从 From 地址派生 SMTP 信封发件人地址，但你可以通过 Hostname 属性（注意这与 Host 不同）来覆盖该设置，例如：
> 
> ```plaintext
> $mail->From = 'user@domainname.com';
> $mail->Hostname = 'www.domainname.com';
> 
> ```
> 
> ```plaintext
> https://github.com/PHPMailer/PHPMailer/issues/1095
> 
> ```

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [2021年七月3日 00:37 UTC](https://meta.discourse.org/t/550-bad-helo-host-impersonating-hostname/195811/2 "2021-07-03T00:37:33Z")

</div>

运行

```
  dig -x your.ip.number

```

能获取你的主机名吗？

---

<div class="post-metadata">

**Author:** ![Codes09](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codes09/32/215056_2.png) [@Codes09](https://meta.discourse.org/u/Codes09)\
**Post date:** [2021年七月3日 16:06 UTC](https://meta.discourse.org/t/550-bad-helo-host-impersonating-hostname/195811/3 "2021-07-03T16:06:40Z")

</div>

嗨，Jay，

Discourse 目前还不允许我在回复中发布链接。所以我会用“dot”代替句号，希望这样能保持清晰。

是的，当我对运行 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）。
