Добрый день! Мне необходимо для тестирования системы периодически отправлять и получать специальные письма с различными заголовками. Для реализации этой задачи я использую 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
------------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 (ваш файл-вложение).
Комментариев нет:
Отправить комментарий