编程语言
首页 > 编程语言> > 使用Python的email.mime.multipart发送HTML邮件时命名内嵌图像

使用Python的email.mime.multipart发送HTML邮件时命名内嵌图像

作者:互联网

使用python的电子邮件包,我发送了带有嵌入式图像的电子邮件.这样可行.现在,我想为这些图片分配实际名称(而不是html标题..),因此在下载它们时,它们不会被命名为“ noname”(例如gmail).现在的代码:

from email.mime.multipart import MIMEMultipart

msgRoot = MIMEMultipart('related')
msgAlternative = MIMEMultipart('alternative')
...

# image file
msgText = MIMEText('<img src="cid:image" alt="Smiley" title="title">', 'html')
msgAlternative.attach(msgText)

# In-line Image
with open('/Users/john/Desktop/2015-04-21_13.35.38.png', 'rb') as fp:
    msgImage = MIMEImage(fp.read())
msgImage.add_header('Content-ID', '<image>')
msgRoot.attach(msgImage)

...
server.sendmail(sender, recipients, msgRoot.as_string())

我尝试了很多事情,还问了谷歌很多次.可能吗谢谢.

解决方法:

解:

实际上可以分配Content-ID,Content-Type,Content-Transfer-Encoding&将内容分配到一个MIME文件(check for more).这样,您可以添加:

msgImage.add_header('Content-Disposition', 'inline', filename='filename')

因此,您最终将拥有:

from email.mime.multipart import MIMEMultipart

msgRoot = MIMEMultipart('related')
msgAlternative = MIMEMultipart('alternative')
...

# image file
msgText = MIMEText('<img src="cid:image" alt="Smiley" title="title">', 'html')
msgAlternative.attach(msgText)

# In-line Image
with open('/Users/john/Desktop/2015-04-21_13.35.38.png', 'rb') as fp:
    msgImage = MIMEImage(fp.read())
msgImage.add_header('Content-ID', '<image>')
msgImage.add_header('Content-Disposition', 'inline', filename='filename')
msgRoot.attach(msgImage)

...
server.sendmail(sender, recipients, msgRoot.as_string())

您完成了.

您可能更喜欢@PascalvKooten提到的方式,像这样创建MIMEImage实例:

msgImage = MIMEImage(fp.read(), filename='filename')

就像魅力一样起作用.

标签:html-email,python
来源: https://codeday.me/bug/20191028/1951797.html