Форум сайта python.su
Добрый день
При отправке писем со вложениями возникла следующая проблема: имена вложений на русском отображаются как noname.
Вложения к письму прикрепляются так:
for f in files or []: part = MIMEBase('application', 'octet-stream') attachment = open(f, "rb") part.set_payload((attachment).read()) encoders.encode_base64(part) part.add_header('Content-Disposition', 'attachment', filename=basename(f)) msg.attach(part)
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Тело письма
Content-Type: application/vnd.ms-excel; name="Статистика.csv"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment; filename="Статистика.csv"
Тело вложения
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Тело письма
Content-Type: application/octet-stream
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="Статистика.csv"
Тело вложения
Офлайн
у меня работает так
if os.path.exists(attach_file) and os.path.isfile(attach_file): file = open(attach_file, 'rb') attachment = MIMEBase('application', "octet-stream") attachment.set_payload(file.read()) email.encoders.encode_base64(attachment) file.close() only_name_attach = os.path.basename(attach_file) attachment.add_header('Content-Disposition', 'attachment', filename="{}".format(only_name_attach)) multi_msg.attach(attachment)
Офлайн
Спасибо, помогло, но частично. В Web - интерфейсе почты (Yandex, Google) вложения отображаются корректно, а в Outlook нет. Outlook файл отображает со следующим именем: “Вложение без имени 02612.dat”
Офлайн
g.alexeyДобрый день. Столкнулся с такой же проблемой. Вы нашли решение?
Спасибо, помогло, но частично. В Web - интерфейсе почты (Yandex, Google) вложения отображаются корректно, а в Outlook нет. Outlook файл отображает со следующим именем: “Вложение без имени 02612.dat”
Офлайн
Добрый день. Вот рабочий вариант:
from email.header import Header if os.path.exists(attach_file) and os.path.isfile(attach_file): file = open(attach_file, 'rb') attachment = MIMEBase('application', "octet-stream") attachment.set_payload(file.read()) email.encoders.encode_base64(attachment) file.close() only_name_attach = os.path.basename(attach_file) h = Header(only_name_attach,'utf-8').encode() attachment.add_header('Content-Disposition', 'attachment', filename="{}".format(h)) multi_msg.attach(attachment)
Офлайн
sidinaxДа, спасибо. Использовал Header для имени вложения.
Добрый день. Вот рабочий вариант:
Офлайн