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
を見て公式Googleドキュメント彼ら側では「レート制限」があるようです:
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.
1 分間に何通のメールを送信していますか? 経験上、通常 Gmail は 1 分間に最大 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