我正在测试发送带有嵌入式png文件的电子邮件。我使用代码:
from smtplib import SMTP
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
template ="""
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<h2>Image Test</h2>
<img src="/home/depot/wintergreen/mplplots/01.png">
</body>
</html>"""
MAIL_HOST = 'smtp.gmail.com:587'
MAIL_USER = 'xxx@gmail.com'
MAIL_PASSWORD = 'xxx'
MAIL_REPICIENTS = ['vincent.konate@gmail.com']
message = MIMEMultipart('alternative')
message['Subject'] = "Test Image"
html = MIMEText(template, 'html', "utf-8")
message.attach(html)
smtp = SMTP(MAIL_HOST)
smtp.ehlo()
smtp.starttls()
smtp.login(MAIL_USER, MAIL_PASSWORD)
smtp.sendmail(MAIL_USER, MAIL_REPICIENTS, message.as_string())
smtp.close()
我正在测试Jupyter笔记本;当我输入
from IPython.display import Image
Image("/home/depot/wintergreen/mplplots/01.png")
图像显示,因此路径正确。
这里可能有什么问题?
答案 0 :(得分:0)
您需要使用email.utils.make_msgid
创建一个ID,然后在图像标签src
属性中使用它。您还需要将图像嵌入消息中。
选中python's 3.5 email example 19.1.14,其中显示了如何在HTML和HTML中嵌入文件。
请注意,对于 3.7 ,API已更改。
答案 1 :(得分:-1)
您的图片网址需要包含主机名。你只有:
<img src="/home/depot/wintergreen/mplplots/01.png">
您需要以下内容:
<img src="http://myhostname.com/home/depot/wintergreen/mplplots/01.png">
因为当您的用户收到电子邮件时,需要有域名。
现在,如果图像未在某处托管,但在所有收件人均可访问的文件系统上可用(例如,在公司内部网上阅读时),则可以使用file
URI而不是http
。例如
<img src="file:///home/depot/wintergreen/mplplots/01.png">
适用于设备可以访问文件本地目录的收件人。
最后,选项包括电子邮件中的图像本身(而不仅仅是指向它的链接)。要实际包含图像,您需要发送一条MIME消息,该消息本身包含HTML,图像和从一个到另一个的引用(&#34;链接&#34;在HTML部分内如:<img src="cid:XXX">
其中cid
指的是图片的Content-ID。有关详细信息,请参阅Embed picture in email。
(您可以直接在HTML中使用数据uri,但这在电子邮件客户端中有很多支持。例如,请参阅What is Data URI support like in major email client software?。您需要调查是否有这样的问题。适合您的用户群。)