返回

如何在Python中轻松嵌入HTML邮件中的图像?

python

使用 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 邮件。这将使您能够创建更丰富、更有吸引力的电子邮件通信。

常见问题解答

  1. 如何获取图像内容 ID?

内容 ID 是添加到图像附件时的唯一标识符。在上述代码示例中,'<image1>' 是使用的内容 ID。

  1. 为什么图像无法嵌入?

确保图像附件正确添加到邮件正文中,并且 HTML 正文中的图像源属性包含正确的图像内容 ID。

  1. 支持哪些图像格式?

MIMEImage 模块支持 JPEG、PNG、GIF 和 BMP 等常见图像格式。

  1. 可以嵌入多个图像吗?

是的,您可以通过为每个图像使用唯一的图像附件和内容 ID 来嵌入多个图像。

  1. 在哪里可以获取有关 emailsmtplib 模块的更多信息?

有关 emailsmtplib 模块的更多信息,请参考 Python 官方文档。