使用sendmail发送大邮件时出现问题
我正在用Python的sendmail
功能,方式如下:
msg = <SOME MESSAGE>
s = smtplib.SMTP('localhost')
s.sendmail(me, you, msg.as_string())
s.quit()
通常这样做是没问题的(也就是说,我能收到邮件),但是当邮件内容比较大的时候(大约200行),就会出现问题(也就是说,没有报错,但邮件就是收不到)。你们觉得这可能是什么原因呢?
4 个回答
0
你可以试着看看SMTP实际上发送了什么。方法是用netcat在一个端口上监听,然后发送数据:先输入 nc -l 5678
,然后在Python中输入 smtplib.SMTP('localhost', 5678)
。
如果看起来没问题(应该不会有问题),你可以试着用 telnet localhost smtp
来直接查看响应。这样你就能大概知道哪里出错了。
1
你可以试着设置一下 debuglevel,这样可以看到协议进展的详细信息。
SMTP.set_debuglevel(level)
这个设置用来调整调试输出的级别。如果你把level设置为真,就会看到连接过程中的调试信息,以及所有发送到服务器和从服务器接收到的消息的调试信息。
当一条消息成功排队后,调试信息的最后部分看起来会像这样:
>>> conn = smtplib.SMTP('mail')
>>> conn.set_debuglevel(1)
>>> conn.sendmail('you@example.com','me@example.com','subject: test\n\ntest.\n')
...
send: 'subject: test\r\n\r\ntest.\r\n.\r\n'
reply: '250 2.5.0 Message received and queued.\r\n'
reply: retcode (250); Msg: 2.5.0 Message received and queued.
data: (250, '2.5.0 Message received and queued.')
{}
2
你要把邮件发给谁呢?你需要考虑一些邮件服务器,比如Yahoo和Hotmail,它们会对收到的邮件进行隔离,特别是当这些邮件被认为可能是垃圾邮件的时候。这种“垃圾邮件”的判断主要取决于邮件的内容、图片和文字的比例、附件的类型、HTML链接的性质、发送的频率、重复邮件的数量、发件人以及其他很多因素。