使用python smtplib发送邮件附件时出现异常行为
我的邮件脚本是基于这个链接的脚本:Fine Frog。我用这个脚本从一些远程机器上发送HTML日志文件,使用了不同的网络服务提供商。
不过,附件发送得并不稳定。虽然大约80%的时间都能成功,但我遇到了两种奇怪的情况。第一种情况是邮件根本没有发送,但会出现下面的错误信息:
Traceback (most recent call last):
File "/root/sapapps/reporter/usage_report.py", line 336, in ?
se.send_mail(['thinkwelldesigns@g1234.com'], cd.contact, 'dave@1234.com', report_subject, text_body, files=[report_name], bcc=[cd.tech_email])
File "/usr/lib/python2.4/site-packages/sap/send_email.py", line 61, in send_mail
mail_server.sendmail(server_addr, addresses, message.as_string())
File "/usr/lib/python2.4/smtplib.py", line 692, in sendmail
(code,resp) = self.data(msg)
File "/usr/lib/python2.4/smtplib.py", line 489, in data
self.send(q)
File "/usr/lib/python2.4/smtplib.py", line 319, in send
raise SMTPServerDisconnected('Server not connected')
smtplib.SMTPServerDisconnected: Server not connected
或者,在某些机器上,会出现这个错误:
reply: '421 Command timeout, closing transmission channel\r\n'
reply: retcode (421); Msg: Command timeout, closing transmission channel
data: (421, 'Command timeout, closing transmission channel')
send: 'rset\r\n'
Traceback (most recent call last):
File "/root/sapapps/reporter/usage_report.py", line 336, in ?
se.send_mail(['thinkwelldesigns@1234.com'], cd.contact, 'dave@1234.com', report_subject, text_body, files=[report_name], bcc=[cd.tech_email])
File "/usr/lib/python2.4/site-packages/sap/send_email.py", line 61, in send_mail
mail_server.sendmail(server_addr, addresses, message.as_string())
File "/usr/lib/python2.4/smtplib.py", line 694, in sendmail
self.rset()
File "/usr/lib/python2.4/smtplib.py", line 449, in rset
return self.docmd("rset")
File "/usr/lib/python2.4/smtplib.py", line 374, in docmd
return self.getreply()
File "/usr/lib/python2.4/smtplib.py", line 348, in getreply
line = self.file.readline()
File "/usr/lib/python2.4/socket.py", line 340, in readline
data = self._sock.recv(self._rbufsize)
socket.error: (104, 'Connection reset by peer')
第二种奇怪的情况是,邮件处理没有错误,附件也能一起发送,但在发送过程中,HTML附件中的一些数据被删掉了。换句话说,如果你登录到远程机器上,你会发现原始文件是完整的,但附加的文件却缺少了一些日志条目。
我猜这些问题可能是不同的,但有没有人能给我一些建议,如何更可靠地发送HTML附件呢?
谢谢大家,
戴夫
2 个回答
1
第一个问题导致了以下两个错误中的一个:
smtplib.SMTPServerDisconnected: Server not connected
或者
socket.error: (104, 'Connection reset by peer')
这个问题通过把邮件服务器换成Gmail解决了。
第二个错误是因为HTML附件的一部分被删掉了,这个问题通过在邮件脚本处理之前先关闭报告文件来解决...
html_report.close()
我还是个Python新手。:-|
1
我之前在使用smtplib.SMTP的时候遇到过一个问题,后来发现邮件服务器需要使用SSL连接。你可以试试用smtplib.SMTP_SSL,如果普通的调用失败了。