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

Как отредактировать почтовый заголовок (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--


Буду благодарен за любую помощь в решении моего вопроса!
  • Вопрос задан
  • 1195 просмотров
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Skillbox
    Профессия Python-разработчик + ИИ
    10 месяцев
    Далее
Решения вопроса 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 - и отправляйте что душе угодно на сервер. Библиотека будет только мешать.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 75 000 ₽
DimaTech Ltd Краснодар
от 140 000 до 140 000 ₽