我的基于 Ubuntu 的网络服务器偶尔需要发送电子邮件。我的Python代码是:
withsmtplib.SMTP('smtp-relay.gmail.com', 587, 'mydomain.com') as s:
s.sendmail(fromaddr, toaddr, msg.as_string())
s.quit()
我有
此设置已正常运行 6 个多月。
两天前,我将 Ubuntu 从 20LTS 升级到 22LTS,将 python 3.8 升级到 3.10。现在,电子邮件在临时服务器上运行良好,但生产环境不断出现问题:
Invalid credentials for relay [...]. The IP\n5.7.1 address you've registered in your G Suite SMTP Relay
service doesn't\n5.7.7 match domain of the account this email is being sent from. If you are\n5.7.1 trying to
relay mail from a domain that isn't registered under your G\n5.7.1 Suite account or has empty envelope-from,
you must configure your\n5.7.1 mail server either to use SMTP AUTH to identify the sending domain or\n5.7.1 to
present one of your domain names in the HELO or EHLO command. For\n5.7.1 more information, please visit
https://support.google.com/a/answer/6140680#invalidcred ...
有什么建议吗?
编辑1: 我在云中启动了旧的 ubuntu 服务器。我将其新 IP 添加为 Google 信任的。电子邮件工作正常。我只能想到三种可能性
我发现这 3 种可能性中的每一种都非常奇怪和令人难以置信,但我会继续研究。
PS:三个可能/可能不相关的事实:
PPS:
事实证明这是一个非常令人沮丧的问题。我最好的猜测是 Linode 的 Ubuntu 22.04 存储库存在问题。无论如何我们都在考虑迁移到AWS,这给了我们强大的动力。
无论如何,以下是我的经验中的一些提示,未来的读者可能会从中受益
python -m smtpd -n -d -c DebuggingServer localhost:2500
我今天遇到了同样的问题 - 这是为我解决的问题。
新服务器启用了 IPv6,这导致了问题。禁用 IPv6 后它立即开始工作。
禁用 IPv6:
sudo nano /etc/sysctl.conf
添加以下行:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
sudo sysctl -p