среда, 3 ноября 2010 г.

Прикрепить файл к письму. Python

На работе попросили переписать скрипт так, чтоб текст приходил не в теле письма, а в прикрепленном письме.
Казалось бы, чего тут сложного, однако все оказалось не так просто.
В моей рабочей версии Python'a (3.1.1) есть небольшой баг, который подробно описан здесь.
Суть в том, что кодер base64 возвращает данные в виде bytes, а должен возвращать string.
На знаю как для новых версий, возможно там изначально исправлена эта ошибка, но для моей подошел вот этот патч. После него все встало на свои места.

import smtplib
import mimetypes
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication

COMMASPACE = ', '
fromaddr = 'from@somehost.com'
toaddrs = 'rcpt1@somehost.com', 'rcpt1@somehost.com'

path = 'c:\\some.file'
msg = MIMEMultipart()
msg['Subject'] = 'Errors in inet files'
msg['From'] = fromaddr
msg['To'] = COMMASPACE.join (toaddrs)
msg.preamble = 'You will not see this in a MIME-aware mail reader.\n'

attach = MIMEApplication (open(path, 'rb').read())
attach.add_header ('Content-Disposition', 'attachment', filename='some.file')
msg.attach (attach)

server = smtplib.SMTP('smtp.somehost.com')
server.set_debuglevel(1)
server.sendmail(fromaddr, toaddrs, msg.as_string())
server.quit()

Комментариев нет:

Отправить комментарий