#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. Вы пытаетесь добавить путь к изображению, чтобы изображение отображалось?