Найти - Пользователи
Полная версия: Отправка E-Mail со вложениями
Начало » Python для новичков » Отправка E-Mail со вложениями
1
g.alexey
Добрый день

При отправке писем со вложениями возникла следующая проблема: имена вложений на русском отображаются как 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)

Сравнил тело письма, отправленное из Outlook (вложение отображается корректно) с письмом, отправленным из приложения:
Outlook:
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"
Тело вложения

Python:
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"
Тело вложения

Разница только в кодировке тела вложения.
В чем ошибка, помогите разобраться.
chewey
у меня работает так
             
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)
g.alexey
Спасибо, помогло, но частично. В Web - интерфейсе почты (Yandex, Google) вложения отображаются корректно, а в Outlook нет. Outlook файл отображает со следующим именем: “Вложение без имени 02612.dat”
ruslv2
g.alexey
Спасибо, помогло, но частично. В Web - интерфейсе почты (Yandex, Google) вложения отображаются корректно, а в Outlook нет. Outlook файл отображает со следующим именем: “Вложение без имени 02612.dat”
Добрый день. Столкнулся с такой же проблемой. Вы нашли решение?
sidinax
Добрый день. Вот рабочий вариант:
 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)
ruslv2
sidinax
Добрый день. Вот рабочий вариант:
Да, спасибо. Использовал Header для имени вложения.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB