python - 发送包含嵌入图像的多部分 html 电子邮件

标签 python email mime attachment multipart

我一直在使用 python 中的电子邮件模块,但我希望能够知道如何嵌入包含在 html 中的图像。

例如,如果 body 是这样的

<img src="../path/image.png"></img>

我想将 image.png 嵌入到电子邮件中,src 属性应替换为 content-id。有人知道怎么做吗?

最佳答案

这是我找到的一个例子。

Recipe 473810: Send an HTML email with embedded image and plain text alternate:

HTML is the method of choice for those wishing to send emails with rich text, layout and graphics. Often it is desirable to embed the graphics within the message so recipients can display the message directly, without further downloads.

Some mail agents don't support HTML or their users prefer to receive plain text messages. Senders of HTML messages should include a plain text message as an alternate for these users.

This recipe sends a short HTML message with a single embedded image and an alternate plain text message.

# Send an HTML email with an embedded image and a plain text message for
# email clients that don't want to display the HTML.

from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEImage import MIMEImage

# Define these once; use them twice!
strFrom = 'from@example.com'
strTo = 'to@example.com'

# Create the root message and fill in the from, to, and subject headers
msgRoot = MIMEMultipart('related')
msgRoot['Subject'] = 'test message'
msgRoot['From'] = strFrom
msgRoot['To'] = strTo
msgRoot.preamble = 'This is a multi-part message in MIME format.'

# Encapsulate the plain and HTML versions of the message body in an
# 'alternative' part, so message agents can decide which they want to display.
msgAlternative = MIMEMultipart('alternative')
msgRoot.attach(msgAlternative)

msgText = MIMEText('This is the alternative plain text message.')
msgAlternative.attach(msgText)

# We reference the image in the IMG SRC attribute by the ID we give it below
msgText = MIMEText('<b>Some <i>HTML</i> text</b> and an image.<br><img src="cid:image1"><br>Nifty!', 'html')
msgAlternative.attach(msgText)

# This example assumes the image is in the current directory
fp = open('test.jpg', 'rb')
msgImage = MIMEImage(fp.read())
fp.close()

# Define the image's ID as referenced above
msgImage.add_header('Content-ID', '<image1>')
msgRoot.attach(msgImage)

# Send the email (this example assumes SMTP authentication is required)
import smtplib
smtp = smtplib.SMTP()
smtp.connect('smtp.example.com')
smtp.login('exampleuser', 'examplepass')
smtp.sendmail(strFrom, strTo, msgRoot.as_string())
smtp.quit()

关于python - 发送包含嵌入图像的多部分 html 电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/920910/

相关文章:

Python IMAP : =? utf-8?问?在主题字符串中

python - Pandas 跳过 x 刻度标签

python - 在 Visual Studio 中使用 PTVS 调试 Python 代码时出现控制台窗口

python - 为什么使用多线程求和是正确的?

python - 如何在 Python/Numpy 中以最快的方式获取 "n"矩阵的最大值?

java - 异常“NoClassDefFoundError for javax/mail/Authenticator

iphone - 如何在 objective-c 中读取 MIME 类型的文件

Android:如何使用 intent-filter 处理 PDF 电子邮件附件?

如果电子邮件无效,PHPMailer 不发送

python - 在 Python 中创建和解析多部分 HTTP 请求