启动本地 SMTP 服务器

0 投票
1 回答
1694 浏览
提问于 2025-04-17 14:22

我打算通过邮件把客户的崩溃报告传给我。所以,我不能使用任何公共的SMTP服务器,因为把任何账户的密码和应用程序打包在一起是不可接受的。

因此,我需要通过我的应用程序直接发送邮件到目标邮件服务器。

我该怎么在Python中实现这个呢?(我在用Windows,所以sendmail这个选项不行)

1 个回答

2

你可以直接使用标准库里的 smtplib

如果你想写代码给任何人发送邮件,这会有点麻烦,因为 smtplib 是以客户端和服务器的方式连接,而不是服务器之间的转发方式。

不过,如果你只需要给一个你自己控制的特定服务器发送邮件,那就简单多了。只需把你的服务器设置为 'mail.example.com',让它接受从 'crash-reports@example.com' 发来的任何邮件。

你的代码大概会是这样的:

import smtplib
addr = 'crash-reports@example.com'
def send_crash_report(crash_report):
    msg = ('From: {}\r\nTo: {}\r\n\r\n{}'.format(
           addr, addr, crash_report)
    server = smtplib.SMTP('mail.example.com')
    server.sendmail(addr, [addr], msg)
    server.quit()

顺便说一下,如果你刚开始做崩溃报告收集器,可能会考虑使用网络服务,而不是邮件地址。因为你会遇到一些问题,比如有些人无法通过公司防火墙/代理访问 25 端口,或者需要写代码从收件箱提取崩溃报告(或者通过 IMAP、mbox 等方式搜索),还要处理那些找到 crash-reports@example.com 的垃圾邮件发送者,他们会发900封关于伟哥的邮件,结果真正的崩溃报告反而淹没在里面等等。

撰写回答