Задать вопрос

Как отредактировать почтовый заголовок (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 <billing@mailserver.loc>
X-Priority: 3 (Normal)
Message-ID: <878185321.20110601112532>
To: abonent1@mailserver.loc
Subject: Just a subject
Resent-from: Billinfo <billing@mailserver.loc>
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--


Буду благодарен за любую помощь в решении моего вопроса!
  • Вопрос задан
  • 1183 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
Amelinium
@Amelinium Автор вопроса
Решение:

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
NeiroNx
@NeiroNx
Программист
Используйте обычные сокеты tcp - и отправляйте что душе угодно на сервер. Библиотека будет только мешать.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы