![通过 Google Cloud VM/Postfix 上的端口 465 或 587 发送邮件](https://linux22.com/image/755271/%E9%80%9A%E8%BF%87%20Google%20Cloud%20VM%2FPostfix%20%E4%B8%8A%E7%9A%84%E7%AB%AF%E5%8F%A3%20465%20%E6%88%96%20587%20%E5%8F%91%E9%80%81%E9%82%AE%E4%BB%B6.png)
我正在尝试从 Google Cloud 上的 VM 实例发送邮件,我最近已设置该实例并从我的旧服务器迁移了所有内容。
但是,我发现 Google Cloud 不允许通过端口 25 发送邮件,因此我尝试通过端口 465 或 587 发送,但邮件无法发送,最终被延迟在邮件队列中。
如何从 Google 云发送邮件?
根据这个: https://cloud.google.com/compute/docs/tutorials/sending-mail#choosing_an_email_service_to_use
...端口 465 和 587 已打开。
再补充一点信息,我尝试通过 Plesk 上的网络邮件和 Thunderbird 发送。这两种方式都接受用户名和密码,并显示电子邮件已发送。但随后被卡在队列中。
这是在:/var/log/maillog
Jul 22 16:11:19 104-155-103-102 postfix/cleanup[2128]: 60E50220AB66: message-id=<0044ead7-f1c2-9665-8fca-ea50c7673c06@email_address.com>
Jul 22 16:11:19 104-155-103-102 spf[2131]: Starting the spf filter...
Jul 22 16:11:19 104-155-103-102 spf[2131]: SPF status: PASS
Jul 22 16:11:19 104-155-103-102 psa-pc-remote[31599]: PASS during call 'spf' handler
Jul 22 16:11:19 104-155-103-102 check-quota[2132]: Starting the check-quota filter...
Jul 22 16:11:19 104-155-103-102 psa-pc-remote[31599]: SKIP during call 'check-quota' handler
Jul 22 16:11:19 104-155-103-102 postfix/qmgr[723]: 60E50220AB66: from=<enquiries@email_address.com>, size=4190, nrcpt=1 (queue active)
Jul 22 16:11:19 104-155-103-102 postfix/error[2134]: 60E50220AB66: to=<[email protected]>, relay=none, delay=0.58, delays=0.57/0.01/0/0, dsn=4.4.1, status=deferred (delivery temporarily suspended: connect to eur.olc.protection.outlook.com[104.47.22.161]:25: Connection timed out)
Jul 22 16:11:19 104-155-103-102 postfix/smtpd[2123]: disconnect from unknown[112.30.25.225] ehlo=1 auth=1 mail=1 rcpt=1 data=1 quit=1 commands=6
谢谢
更新
我仍然可以访问我的旧服务器,它允许在所有端口(包括端口 25)上发送邮件。该服务器仍然设置了 Plesk 和域,以及我的所有 [电子邮件保护]
在发布原始帖子之前,我有已经尝试过以下方法:
DNS 记录
mydomain.com -- MX (10) -- mail.mydomain.com
mail.mydomain.com -- A -- old.server.ip.address
这句话显然是为了能够使用旧服务器作为电子邮件服务器,并在使用 Thunderbird 等桌面应用程序发送电子邮件时绕过新服务器。但是,我也有 PHP 脚本来向成员发送电子邮件,所以我需要让中继主机正常工作。
我尝试了下面的方法,以及很多天以来的许多其他方法,但都没有奏效,这就是我写这篇文章的原因。我仍然不确定为什么它显示“relay=none”并在邮件日志中显示端口 25。
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = static:[email protected]:mypassword
relayhost = [old.server.ip.address]:465
#also tried port 587
如上邮件日志所示,此操作一直超时。然后我决定尝试使用 gmail 作为 smtp 服务器,但一开始没有成功:
smtp_sasl_password_maps = static:[email protected]:mypassword
smtp_sasl_password_maps = hash:/etc/postfix/saslpasswd
relayhost = [smtp.gmail.com]:465
但是,昨晚我添加了显示的前三行,然后它运行良好(除了“发件人”电子邮件地址显示为我的个人电子邮件地址,但至少电子邮件正在发送):
smtp_always_send_ehlo = yes
smtp_tls_security_level = encrypt
smtp_tls_wrappermode = yes
smtp_sasl_password_maps = static:[email protected]:mypassword
smtp_sasl_password_maps = hash:/etc/postfix/saslpasswd
relayhost = [smtp.gmail.com]:465
然后我决定再次尝试我的旧服务器,并用“mail.mydomain.com”替换服务器的 IP 地址。
smtp_sasl_password_maps = static:[email protected]:mypassword
relayhost = [mail.mydomain.com]:465
我已将静态密码替换为:
#smtp_sasl_password_maps = hash:/etc/postfix/saslpasswd
现在它运行良好。我将在下面的回答中反映这一点。
作为从未设置过 SMTP 服务器、端口等的人,我不知道邮箱通常只在端口 25 上监听新邮件,并且不确定这意味着什么,因此我感到困惑。
答案1
外部 SMTP 服务器不会监听端口 465 或 587 上的一般邮件;它们只会监听端口 25。端口 465 和 587 用于安全中继,系统只会在这些端口上接受经过身份验证的用户的邮件。因此,您需要一个外部邮件服务来正确中继您的邮件。
答案2
自从我在上面发布问题以来,我已经设法使邮件正常运行,因此我将在下面发布我的解决方案,希望能对其他人有所帮助。
我知道这些内容之前已经介绍过了,因为我通过搜索找到了所有内容,但是有些部分缺失或者对我来说不起作用,所以我将它们全部放在一起。
这就是让我的电子邮件以两种不同的方式工作的方法,通过 gmail 和不同的 smtp 服务器。
我认为之前导致失败的原因是因为我使用了 smtp 服务器 ip 地址:
relayhost = [123.456.654.321]:465
而不是域名:
relayhost = [smtp.myrelayhost.com]:465
但这也许只是巧合。
在它开始工作之前我还添加了以下内容:
smtp_always_send_ehlo = yes
smtp_tls_security_level = encrypt
smtp_tls_wrappermode = yes
#all necessary for port 465?
因此,最终实现这一目标的选项是:
smtp_always_send_ehlo = yes
smtp_tls_security_level = encrypt
smtp_tls_wrappermode = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = static:[email protected]:mypassword
relayhost = [smtp.myrelayhost.com]:465
或者
smtp_always_send_ehlo = yes
smtp_tls_security_level = encrypt
smtp_tls_wrappermode = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = static:[email protected]:mypassword
relayhost = [smtp.gmail.com]:465
我还更改了静态用户名和密码,并将其包含在 saslpasswd 中:
smtp_sasl_password_maps = hash:/etc/postfix/saslpasswd
在 /etc/postfix/saslpasswd 中:
[smtp.myrelayhost.com]:465 [email protected]:mypassword
然后在 SSH 中运行它(我认为将 saslpasswd 保存为 .db 文件……?)
# postmap /etc/postfix/saslpasswd
然后重新启动 postfix:
# /etc/init.d/postfix restart