我main.cf
在 Linux SUSE 上的 Postfix 中像这样设置
inet_interfaces = localhost
inet_protocols = ipv4
masquerade_domains =
masquerade_exceptions = root
mydestination = $myhostname, localhost.$mydomain
myhostname = localhost
mynetworks_style = subnet
relayhost=[smtp-relay.gmail.com]:25
smtpd_delay_reject = yes
smtpd_helo_required = no
smtpd_client_restrictions =
smtpd_helo_restrictions =
smtp_sasl_auth_enable = no
smtp_sasl_security_options =
smtp_sasl_password_maps =
smtpd_sasl_auth_enable = no
smtp_use_tls = no
我试过了,telnet smtp-relay.gmail.com 25
而且很有效
无论如何,当我尝试使用服务器中的 postfix 发送电子邮件时,我遇到了问题。
root@localhost
(host smtp-relay.gmail.com[ipv4] refused to talk to me: 421 4.7.0 Try again later, closing connection. (EHLO)
答案1
看看谷歌官方文档看起来像是他们那边的“速率限制”:
421, "4.7.0", Try again later, closing connection. This usually indicates a Denial of Service (DoS) for the SMTP relay at the HELO stage.
您每分钟发送多少封邮件?根据经验,Gmail 通常每分钟最多接收 50/100 封邮件。
根据评论进行编辑
嗯,看起来同样的错误出现在错误的 HELO/HELO 上(正如我最初怀疑的那样)。
我刚刚尝试过:
$> telnet smtp-relay.gmail.com 25
Trying 108.177.15.28...
Connected to gmail-smtp-relay.l.google.com.
Escape character is '^]'.
220 smtp-relay.gmail.com ESMTP b8-v6sm74445wrr.1 - gsmtp
helo localhost
421 4.7.0 Try again later, closing connection. (EHLO) b8-v6sm74445wrr.1 - gsmtp
Connection closed by foreign host.
所以它肯定是你的 EHLO 字符串。
myhostname = localhost
您的文件中有main.cf
,您应该将其更改为myhostname = [your server fqdn]
,即您应该有一个完全限定域名为您的服务器提供正确的 DNS/rDNS 条目。
答案2
我在 PHP 应用程序中使用 Symfony/Mailer 时确实遇到了这个问题。它确实使用了如下 SMTP 中继:
MAILER_DSN=smtp://smtp-relay.gmail.com:587
修复方法是定义local_domain
参数:
MAILER_DSN=smtp://smtp-relay.gmail.com:587?local_domain=your-domain.com