Почему добавление ключа к заголовку электронной почты в Python приводит к неправильному форматированию? - PullRequest
0 голосов
/ 05 июля 2019

Я использую Python для автоматизации электронной почты, которую я должен отправить, и строю свой код на основе пакета электронной почты (шестой) и этого урока для создания защищенное соединение с использованием SMTP. Упрощенный код выглядит так:

import smtplib
import ssl
from getpass import getpass
from email.message import EmailMessage
from email.headerregistry import Address
from email.utils import make_msgid

port = 465
strPass = getpass('Type password: ')

msg = EmailMessage()
msg['Subject'] = 'Title'
msg['From'] = Address('Name1', 'name1', 'example.com')
msg['To'] = Address('Name2', 'name2', 'example.com')
msg['Cc'] = Address('Name3', 'name3', 'example.com')
msg.set_content('somestringplain')

asparagus_cid = make_msgid()
msg.add_alternative('''\
<html>
    <head></head>
    <body>
        <p>somestringhtml</p>
        <img src='cid:{asparagus_cid}' />
    </body>
</html>
'''.format(asparagus_cid=asparagus_cid[1:-1]), subtype='html')

with open('./someimage.png', 'rb') as img:
    msg.get_payload()[1].add_related(img.read(), 'image', 'png', cid=asparagus_cid)

context = ssl.create_default_context()

with open('outgoing.msg', 'wb') as f:
    f.write(bytes(msg))

with smtplib.SMTP_SSL('smtp.gmail.com', port, context=context) as server:
    server.login('name1@example.com', strPass)
    server.send_message(msg)

Код работает так, как будто он успешно отправляет почту, но он нарушает форматирование, с которым он должен был быть отправлен. Ниже показано, как форматируется тело:

MIME-Version: 1.0
Content-Type: multipart/alternative;
 boundary="===============1615846942694093528=="

--===============1615846942694093528==
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit

somestringplain

--===============1615846942694093528==
MIME-Version: 1.0
Content-Type: multipart/related;
 boundary="===============2463145904749303214=="

--===============2463145904749303214==
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: quoted-printable

<html>
    <head></head>
    <body>
        <p>somestringhtml</p>
        <img src='cid:156235339922.24812.3941539910138014756@MYPC' />
    </body>
</html>

...

Я выяснил, что проблема заключается в определении точной копии электронной почты. Если я удалю строку с битом msg['Cc'], письмо будет отправлено в правильном формате HTML.

Почему это происходит и как заставить это работать, если мне нужно установить точную копию для моей задачи?

Если применимо, фактическим клиентом является учетная запись G Suite.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...