如何在Python中轻松嵌入HTML邮件中的图像?
2024-03-12 09:28:10
使用 Python 轻松嵌入 HTML 邮件中的图像
简介
作为一名 Python 新手,发送带有嵌入图像的 HTML 邮件似乎是一项艰巨的任务。但是,通过采用适当的方法,这个问题可以得到轻松解决。本文将分步指导您如何在 Python 脚本中嵌入图像并发送 HTML 邮件。
问题陈述
想要发送带有嵌入图像的 HTML 邮件,但发现图像无法嵌入。
解决方案
要嵌入图像,需要创建图像附件并将其添加到邮件中。以下步骤将详细说明如何实现:
1. 创建邮件正文和附件
使用 email.mime.multipart
模块创建多部分邮件正文,其中包含文本和附件部分。然后,使用 email.mime.text
模块为 HTML 正文创建 MIME 文本对象,并在其中添加图像占位符。
接着,打开要嵌入的图像文件并将其内容读入变量。使用 email.MIMEImage
模块创建图像附件,并将图像数据和内容 ID 添加到图像附件中。最后,将图像附件添加到邮件正文中。
2. 添加 HTML 正文
将 HTML 正文部分添加到邮件中,并确保 HTML 代码中图像的源属性包含图像附件的内容 ID。
3. 发送邮件
最后,使用 smtplib
模块使用 SMTP 协议发送邮件。指定邮件的发送者、接收者和主题,并将邮件正文转换为字符串发送。
完整代码
以下是完整的 Python 脚本,用于发送带有嵌入图像的 HTML 邮件:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.MIMEImage import MIMEImage
msg = MIMEMultipart('alternative')
msg['Subject'] = "My text dated %s" % (today)
msg['From'] = sender
msg['To'] = receiver
html = """\
<html>
<head></head>
<body>
<img src="cid:image1" alt="Logo" style="width:250px;height:50px;"><br>
<p><h4 style="font-size:15px;">Some Text.</h4></p>
</body>
</html>
"""
# 打开要嵌入的图像文件
with open('logo.png', 'rb') as fp:
image_data = fp.read()
# 创建图像附件并添加内容 ID
image = MIMEImage(image_data)
image.add_header('Content-ID', '<image1>')
# 将图像附件添加到邮件中
msg.attach(image)
# 添加 HTML 正文
html_part = MIMEText(html, 'html')
msg.attach(html_part)
# 发送邮件
mailsrv = smtplib.SMTP('localhost')
mailsrv.sendmail(sender, receiver, msg.as_string())
mailsrv.quit()
结论
通过遵循这些步骤,您可以轻松地在 Python 脚本中嵌入图像并发送 HTML 邮件。这将使您能够创建更丰富、更有吸引力的电子邮件通信。
常见问题解答
- 如何获取图像内容 ID?
内容 ID 是添加到图像附件时的唯一标识符。在上述代码示例中,
'<image1>'
是使用的内容 ID。
- 为什么图像无法嵌入?
确保图像附件正确添加到邮件正文中,并且 HTML 正文中的图像源属性包含正确的图像内容 ID。
- 支持哪些图像格式?
MIMEImage
模块支持 JPEG、PNG、GIF 和 BMP 等常见图像格式。
- 可以嵌入多个图像吗?
是的,您可以通过为每个图像使用唯一的图像附件和内容 ID 来嵌入多个图像。
- 在哪里可以获取有关
email
和smtplib
模块的更多信息?
有关
smtplib
模块的更多信息,请参考 Python 官方文档。