Страницы

Поиск по вопросам

четверг, 11 июля 2019 г.

Редактирование и настройка почтовых заголовков (mail headers) в Python

Добрый день! Мне необходимо для тестирования системы периодически отправлять и получать специальные письма с различными заголовками. Для реализации этой задачи я использую smtplib и MIMEText с энкодером encode_quopri.
import smtplib from email.mime.text import MIMEText from email.encoders import encode_quopri
SERVER = 'mailserver.loc' FROM = 'sender@' + SERVER TO = 'abonent1@' + SERVER
msg = MIMEText('проверка проверка проверка', 'plain', _charset='windows-1251') msg['Subject'] = 'subject' msg['From'] = FROM msg['To'] = TO msg['X-Message-id'] = 'xmsg_id' encode_quopri(msg)
print (msg)
На выходе получаю:
Content-Type: text/plain; charset="windows-1251" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: subject From: sender@mailserver.loc To: abonent1@mailserver.loc X-Message-id: xmsg_id Content-Transfer-Encoding: quoted-printable
=EF=F0=EE=E2=E5=F0=EA=E0=20=EF=F0=EE=E2=E5=F0=EA=E0=20=EF=F0=EE=E2=E5=F0=EA= =E0
Но у меня задвоился заголовок:
Content-Transfer-Encoding: base64 ... Content-Transfer-Encoding: quoted-printable
Я попробовал удалить первый, но тогда ломается quoted-printable и результат:
7/Du4uXw6uAg7/Du4uXw6uAg7/Du4uXw6uA=3D
Моя цель получить вот такой заголовок:
Date: Wed, 1 Jun 2011 11:25:32 +0400 From: Billinfo X-Priority: 3 (Normal) Message-ID: <878185321.20110601112532> To: abonent1@mailserver.loc Subject: Just a subject Resent-from: Billinfo MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----------115EA32B5A1C2" Resent-Message-Id: <20110601072537.A8F1A3C14A> Resent-Date: Wed, 1 Jun 2011 11:25:37 +0400 (MSD)
------------115EA32B5A1C2 Content-Type: text/plain; charset=windows-1251 Content-Transfer-Encoding: quoted-printable
=EF=F0=EE=E2=E5=F0=EA=E0=20=EF=F0=EE=E2=E5=F0=EA=E0=20=EF=F0=EE=E2=E5=F0=EA= =E0 ------------115EA32B5A1C2 Content-Type: APPLICATION/VND.MS-EXCEL; name="doc.xls" Content-transfer-encoding: base64 Content-Disposition: attachment; filename="doc.xls"
some base64 content ------------115EA32B5A1C2--
Буду благодарен за любую помощь в решении моего вопроса!
UPD 11/04/2015: Моё решение:
from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.charset import Charset from email.encoders import encode_quopri
SERVER = 'mailserver.loc' FROM = 'billing@' + SERVER TO = 'abonent1@' + SERVER
msg = MIMEMultipart('mixed') msg['Subject'] = 'subject' msg['From'] = FROM msg['To'] = TO msg['X-Message-id'] = 'xmsg_id'
charset = Charset('windows-1251')
att1 = MIMEText('проверка111 проверка проверка', 'plain', _charset=None) encode_quopri(att1) att1.set_charset(charset) del att1['Content-Transfer-Encoding'] del att1['MIME-Version'] att1['Content-Transfer-Encoding'] = 'quoted-printable'
msg.attach(att1)
print (msg.as_string())
################### OUTPUT ################### # Content-Type: multipart/mixed; boundary="===============2009055196==" # MIME-Version: 1.0 # Subject: subject # From: billing@mailserver.loc # To: abonent1@mailserver.loc # X-Message-id: xmsg_id
# --===============2009055196== # Content-Type: text/plain; charset="windows-1251" # Content-Transfer-Encoding: quoted-printable
# =D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B0111=20=D0=BF=D1=80=D0=BE=D0= # =B2=D0=B5=D1=80=D0=BA=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0= # =B0 # --===============2009055196==--
Благодарю за помощь! Заголовки нормально воспринимаются принимающей программой и письмо корректно обрабатывается.


Ответ

То, что вы желаете получить — составное письмо. Его составляющие: 1. текст; 2. файл-вложение.
Поэтому при формировании письма следует использовать тип MIMEMultipart, который будет играть роль оболочки для его частей (именно ему следует присваивать заголовки, которые вы присваиваете MIMEText).
Далее к оболочке нужно будет прикрепить (метод attach) объекты типов MIMEText (ваш текст), и MIMEApplication (ваш файл-вложение).

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

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