在Python中通过邮件发送嵌入的图片
我想知道怎么在Python中把图片放到邮件的正文里发送。我在网上查过了,找到的都是关于附件的发送方法。那我该怎么把图片直接放在邮件里呢?
这是我的代码:
from django.core.mail import EmailMessage
subject = 'Report for ' + filename
content = 'Hello All \nPFA ' + filename + '. \n\n\nThis is an auto generated mail. Please do not reply to this email. '
receipients =['x','y']
sender = ''
message = EmailMessage(subject,content,sender,bcc = receipients)
message.attach_file(filepath)
message.send()
2 个回答
0
我会使用 base64
编码,并把数据直接嵌入到邮件正文中,比如:
<img width="16" height="16" alt="star" src="data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7" />
这样做的效果可以在这里查看:http://jsfiddle.net/rinz/jDjb5/
1
我觉得直接设置文本内容是做不到的。最简单的方法可能是通过 Django 的模板渲染系统发送一封带有 HTML 的邮件。这样你就可以按照你想要的方式直接插入图片(比如 <img src="...">
)。
from django.core.mail import EmailMultiAlternatives
from django.template.loader import render_to_string
mail = EmailMultiAlternatives(
subject,
render_to_string('template.txt',
sender,
recipients
)
mail.attach_alternative(render_to_string('template.html', {'image_src': '...'}), 'text/html'))
mail.send()
需要注意的是,最好同时包含一封纯文本邮件(没有图片),以防接收方的邮件系统无法读取 HTML(这种情况几乎不会发生)。更清楚地说,template.html
和 template.txt
是你想发送的相同内容,只是一个有 HTML,一个没有 HTML。比如:
template.txt
Hello All \nPFA \n\n\nThis is an auto generated mail. Please do not reply to this email.
template.html
<p> Hello All </p>PFA </br> <img src=" {{ image_src }} "> ...