Я использую 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.