我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
並且有效
無論如何,當我嘗試在伺服器中使用後綴發送電子郵件時,我遇到了問題。
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