无法让它工作。我多次浏览了所有的文档站点,并搜索了这里和其他地方的问题,并试图遵循回复,但一无所获。
这是在 GCE、最小服务器、安装了 postfix 和邮件的 Debian 延伸服务器上。
邮件尝试的日志中吐出了一堆内容,但这似乎是最突出的信息
relay=smtp-relay.gmail.com[74.125.124.28]:587, delay=8471,
delays=8470/0.03/0.41/0.05, dsn=5.7.1,
status=bounced (host smtp-relay.gmail.com[74.125.124.28] said: 550-5.7.1 Invalid credentials for relay [34.66.70.41].
The IP address you've 550-5.7.1 registered in your G Suite SMTP Relay service doesn't match domain of 550-5.7.1 the account this email is being sent from.
If you are trying to relay 550-5.7.1 mail from a domain that isn't registered under your G Suite account 550-5.7.1 or has empty envelope-from, you must configure your mail server 550-5.7.1 either to use SMTP AUTH to identify the sending domain or to present 550-5.7.1 one of your domain names in the HELO or EHLO command.
GCE 域和 GSuite 域是相同的。
因此,我的 postfix main.cf 如下所示:
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
readme_directory = no
# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on
# fresh installs.
compatibility_level = 2
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = <mydomain>
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = <mydomain>, localhost
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
relayhost = smtp-relay.gmail.com:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =
smtp_tls_CAfile = /etc/postfix/cacert.pem
smtp_use_tls = yes
mailname 文件的内容是:
<mydomain>
sasl_passwd 文件的内容为:
[smtp.gmail.com]:587 <gmail-user-name>:<gmail-password>
GSuite 设置如下:
From Website
Allowed senders: Only addresses in my domains
Only accept mail from the specified IP addresses: Yes
Allowed IP addresses: Website Server
Require SMTP Authentication: Yes
Require TLS encryption: Yes
‘允许 IP 地址’设置为 GCE 的外部地址。
所以,我很困惑。
任何想法都值得赞赏。
答案1
您无法使用个人 Gmail 帐户进行身份验证,它必须是与您的 G Suite 域绑定的帐户。
答案2
根据设计,端口 25 始终被阻止且无法使用,即使通过使用 G Suite 的 SMTP 中继也是如此。
Google Compute Engine 允许除端口 25 之外的所有端口上的出站连接,端口 25 因存在滥用风险而被阻止。所有其他端口均开放,包括端口 587 和 465。
这在“从实例发送电子邮件“ 文章。
SendGrid、Mailgun 和 Mailjet 等产品为 Compute Engine 客户提供免费套餐,以便通过其服务器设置和发送电子邮件。我强烈建议您查看参考文档,并根据您的解决方案实施符合您期望的电子邮件解决方案。
答案3
我查看了您发布的所有配置设置,对我来说看起来非常普通。目前我发现可能有问题的是以下行:
Allowed IP addresses: Website Server
也许您必须使用 IP 地址而不是实例的名称。在文档指出必须使用 IP 地址/范围。进行更改并发布结果。
答案4
经过许多令人沮丧的小时后,收到上述错误消息并认为问题出在我的 postfix 配置文件中,我发现这实际上是我的托管公司(digitalocean)创建的 PTR 记录被破坏了,因为分配给我的 IP 地址与我选择的域名不匹配。
长话短说,除非正确设置了反向查找您的域名和 IP,否则 Google 的 SMTP 中继服务将无法工作。对于 digitalocean 来说,这涉及一个完全不直观且没有文档记录的过程,即单击您的 droplet 名称,将其变成一个可编辑框,并将其替换为您的域名。