kam*_*yrb 6 email smtp sendmail python-3.x docker
我想smtp在python上用lib发送邮件。我知道它在端口号 25 上使用本地 smtp 服务。我有以下代码。这些代码在我的本地运行没有任何问题,邮件发送成功。但是当我将它们移动到 docker 容器时,邮件不会发送,也不会出现任何错误。
我的代码:
from_mail = 'noreply@testmail.com'
to_mail = 'to@testmail.com'
s = smtplib.SMTP('localhost')
subject = 'Test Subject'
content = 'content test'
message = f"""\
Subject: {subject}
To: {to_mail}
From: {from_mail}
{content}"""
result = s.sendmail(from_mail, to_mail, message)
s.quit()
Run Code Online (Sandbox Code Playgroud)
运行这些代码后,我得到空字典 ({}) 作为result值。在 sendmail 方法描述中有这样的:
... 消息被接受并发送到四个地址中的三个,一个被拒绝,错误代码为 550。如果所有地址都被接受,则该方法将返回一个空字典。
和网络配置有关吗?我应该配置任何网络设置吗?
您共享的代码是 SMTP 客户端应用程序。假设使用 SMTP 客户端标准库smtplib并且 SMTP 服务器在本地主机上运行,则代码将在以下条件下在 Docker 容器中运行:
--net=host,然后不需要进行任何更改。调用smtplib.SMTP('localhost')将连接到主机上运行的 SMTP 服务器。--net=host。然后,如果您使用 Windows 或 MacOS,host.docker.internal则需要连接到。localhost如果你使用Linux,可能需要使用另一个技巧。本质上,代码仍然连接到主机上运行的 SMTP 服务器。请分享以下内容以更好地理解该问题:
进一步来说:
您正在使用的操作系统。桌面版 Docker 在 Mac 和 Windows 上的行为有所不同,尤其是在网络功能方面。
Dockerfile你用。否则无法运行图像并复制您所面临的问题并理解您的意思sendmail service is running in my container.
完全工作的Python代码(包括导入等...)否则,不清楚smtplib你使用的是什么。
文档链接。如果您使用标准库smtplib,那么它的文档没有这样的描述:
sendmail方法描述如下:
...消息被接受发送到四个地址中的三个,但有一个被拒绝,错误代码为 550。如果所有地址都被接受,则该方法将返回一个空字典。