Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 23, 2017 11:08:20

g.alexey
Зарегистрирован: 2017-12-23
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Отправка E-Mail со вложениями

Добрый день

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

Разница только в кодировке тела вложения.
В чем ошибка, помогите разобраться.

Офлайн

#2 Дек. 23, 2017 11:36:04

chewey
Зарегистрирован: 2016-02-03
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Отправка E-Mail со вложениями

у меня работает так

             
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)

Офлайн

#3 Дек. 25, 2017 10:00:35

g.alexey
Зарегистрирован: 2017-12-23
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Отправка E-Mail со вложениями

Спасибо, помогло, но частично. В Web - интерфейсе почты (Yandex, Google) вложения отображаются корректно, а в Outlook нет. Outlook файл отображает со следующим именем: “Вложение без имени 02612.dat”

Офлайн

#4 Янв. 28, 2020 09:14:54

ruslv2
Зарегистрирован: 2020-01-28
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Отправка E-Mail со вложениями

g.alexey
Спасибо, помогло, но частично. В Web - интерфейсе почты (Yandex, Google) вложения отображаются корректно, а в Outlook нет. Outlook файл отображает со следующим именем: “Вложение без имени 02612.dat”
Добрый день. Столкнулся с такой же проблемой. Вы нашли решение?

Офлайн

#5 Март 6, 2020 11:54:49

sidinax
Зарегистрирован: 2017-04-24
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Отправка E-Mail со вложениями

Добрый день. Вот рабочий вариант:

 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)

Офлайн

#6 Март 9, 2020 05:38:01

ruslv2
Зарегистрирован: 2020-01-28
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Отправка E-Mail со вложениями

sidinax
Добрый день. Вот рабочий вариант:
Да, спасибо. Использовал Header для имени вложения.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version