Нестабильное поведение с вложениями электронной почты с использованием python smtplib - PullRequest
1 голос
/ 30 декабря 2010

Мой почтовый сценарий основан на этом сценарии 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?

ТИА

Dave

Ответы [ 2 ]

1 голос
/ 30 декабря 2010

Первая проблема, которая вызвала одну из двух следующих ошибок:

smtplib.SMTPServerDisconnected: Server not connected 

или

socket.error: (104, 'Connection reset by peer') 

было решено путем переключения на Gmail в качестве почтового сервера.

Вторая ошибка, когда часть вложения HTML была удалена, была устранена путем закрытия файла отчета до обработки сценария электронной почты ...

html_report.close()

Я новичок в Python. : - |

1 голос
/ 30 декабря 2010

У меня была проблема перед использованием smtplib.SMTP, и я выяснил, какой почтовый сервер требуется, используя соединение SSL.Вы можете попробовать использовать smtplib.SMTP_SSL в случае сбоя при обычном вызове.

...