我在发送主机和中继主机上都使用 exim,发送主机似乎提供:
HELO foo_bar.example.com
回复:
501 Syntactically invalid HELO argument(s)
下划线实际上在 Internet 主机名中无效,尽管有些人仍然使用它们。一个健全的 DNS 服务器不应该让你有他们的记录。
更改系统的主机名,使其有效,希望这会解决它。
在花了这么多时间试图解决这个问题之后,在我的情况下,这个问题只是白手起家,我最终找到了一个解决方案。在我的例子中,只有部署到 Suse 操作系统的系统突然停止发送电子邮件,而不是那些(相同)在 Ubuntu 上运行的系统。在耗尽并消除了此问题的所有建议可能性,甚至考虑更改这些机器的操作系统后,我发现发送电子邮件服务以某种方式对主机的主机名是敏感的。在 Ubuntu 机器中,文件 /etc/hosts 只有以下行:
127.0.0.1 localhost
停止发送电子邮件的 Suse 机器也是如此。从 Suse 机器编辑 /etc/hosts 到
127.0.0.1 localhost proplad
其中 proplad 是机器的主机名,错误消失了。似乎某些安全策略(可能来自 smtp 服务)使用通过 API 携带的主机名信息,这在 Ubuntu 机器上被忽略,但在 Suse 机器上却没有。希望这对其他人有所帮助,避免在互联网上进行大量研究。
迪亚戈的回答帮助我解决了我一直试图弄清楚的问题。
我们的 Suse 操作系统也突然停止工作。尝试了我在这里和谷歌上找到的每一个建议。没有任何效果。尝试将我们的域添加到 etc/hosts 但没有帮助。
使用 hostname 命令获取服务器的主机名。就像 Digao 建议的那样,将该主机名添加到 etc/hosts 文件中。
127.0.0.1 localhost susetest
我保存了更改,然后运行 postfix stop,postfix start。现在就像一个魅力。
to 的参数HELO
应该是主机名或 IP 地址。foo_bar.example.com 既不是 IP 地址也不是主机名(下划线在主机名中是非法的),因此错误消息是正确的,没有什么可修复的。
使用 qmail 我遇到了这个问题。我意识到这是因为之前未完成的安装。
1) 发送电子邮件时,qmail 会用“HELO ...”向其他 SMTP 服务器宣布自己,然后将文件中的内容添加到:/var/qmail/control/me
(有时文件位于/var/qmail/control/helohost
)
2) 这个文件应该有一个主机名,里面有一个有效的 DNS 条目。
我的没有,(none)
这就是邮件无法发送的原因。
我发现我的本地开发服务器突然停止发送电子邮件(使用外部 SMTP)并且在我发现的服务器日志中:
拒绝来自 cpc96762-*******.net [ . .**.68]:语法上无效的参数:127.0.0.1:8888/app_dev.php
127.0.0.1:8888/app_dev.php 是我的本地 URL,我使用的是 Docker、Symfony 和 Swift Mailer。
在我的情况下,唯一有帮助的解决方案是添加参数:
local_domain = "localhost"
到我的 Swift Mailer 配置。这解决了所有的问题。
请参阅 Swift Mailerlocal_domain
选项的文档:https ://symfony.com/doc/current/reference/configuration/swiftmailer.html#local-domain