Пакет электронной почты Python с HTML

#python #html #email #smtp

Вопрос:

Я ищу решение этой проблемы: отправляйте электронную почту через SMTP с использованием HTML. Я следую за доктором здесь https://docs.python.org/3/library/email.html и вот https://docs.python.org/3/library/email.examples.html, но не может найти обходной путь для интеграции HTML для добавления части изображения:

 asparagus_cid = make_msgid()
msg.add_alternative("""
<html>
  <head></head>
  <body>
   <p>Salut!</p>
   <p>Cela ressemble à un excellent
     <a href="http://www.yummly.com/recipe/Roasted-Asparagus-Epicurious-203718">
        recipie
    </a> déjeuner.
</p>
<img src="cid:{asparagus_cid}" />
</body>
</html>
""".format(asparagus_cid=asparagus_cid[1:-1]), subtype='html')

with open("roasted-asparagus.jpg", 'rb') as img:
     msg.get_payload()[1].add_related(img.read(), 'image', 'jpeg',
                                 cid=asparagus_cid)
 

Ответ №1:

Изменить :
Чтобы вставить a python object , вы можете использовать f-string s. Они не громоздки и плавно прикрепляются к любому строковому объекту.

 from email.message import EmailMessage

object_to_be_inserted = "love"

message = EmailMessage()
message.add_alternative(f"""<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>

    {object_to_be_inserted}

  </body>
</html>
""", subtype="html")
 
 print(message)
 
 [output]: Content-Type: multipart/alternative;
 boundary="===============1697891563109361365=="

--===============1697891563109361365==
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: 7bit
MIME-Version: 1.0

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    love
  </body>
</html>
--===============1697891563109361365==--
 

======================================================
Старый ответ :
Можно отправить электронное письмо с помощью html, используя экземпляр EmailMessage класса. Параметр подтип позволяет изменить формат сообщения с обычного текста на, среди прочих форматов, html.

 import smtplib
from email.message import EmailMessage #This class has all you need to constitute an email message

#Initiate an instance of EmailMessage
message = EmailMessage()

message['subject'] = "The email subject"
message['From'] = 'your@address.com'
message['To'] = 'recipient@address.com'

#Now for the message body
message.set_content('A plain text fallback')
message.add_alternative("""<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    
  </body>
</html>
""", subtype='html')

#Then on with your endeavour as you must've seen in the documentation.
with smtplib.SMTP_SSL('server_address', <port_no>) as smtp:
    smtp.login('address', 'password')
    smtp.send_message(message)

 

Теперь перейдем к изображению. Вы можете добавить его в тело html, как если бы вы делали это на статической веб-странице.

Комментарии:

1. Я хотел бы иметь возможность изменять некоторые теги в HTML-тексте в соответствии с частью изображения

2. Я не совсем понимаю, что вы имеете в виду. Пожалуйста, будьте более конкретны.

3. Прошу прощения, я не понял вашу проблему с самого начала. Думаю, теперь я понимаю, что ты имеешь в виду. Проверьте редактирование : вы можете легко вставить объект в удобочитаемом виде с f-string помощью

4. Да, я также использовал f-строку, но, по-видимому, проблема в HTML-коде

5. Вы пытаетесь добавить путь к изображению, чтобы изображение отображалось?