使用python smtplib的电子邮件附件的不稳定行为

时间:2010-12-30 01:18:25

标签: python email email-attachments smtplib

我的电子邮件脚本基于Fine Frog的此脚本。我正在使用此脚本从使用各种ISP的多台远程计算机发送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附件中删除。 IOW,如果您登录到远程计算机,您会发现原始文件完好无损,但附件中的文件是错过的日志条目。

我猜这些问题是无关的问题,但有没有人就如何最可靠地发送HTML附件提出一些建议?

TIA,

戴夫

2 个答案:

答案 0 :(得分:1)

在使用smtplib.SMTP之前我遇到了问题,并找出了使用SSL连接所需的电子邮件服务器。如果常规调用失败,您可以尝试使用smtplib.SMTP_SSL。

答案 1 :(得分:1)

引发以下两个错误之一的第一个问题:

smtplib.SMTPServerDisconnected: Server not connected 

socket.error: (104, 'Connection reset by peer') 
通过切换到Gmail作为邮件服务器解决了

问题。

通过在处理电子邮件脚本之前关闭报告文件来解决部分HTML附件被删除的第二个错误...

html_report.close()

我是一个Python新手。 : - |