使用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())
我尝试了很多东西,并且还多次询问谷歌。它甚至可能吗?感谢。
答案 0 :(得分:3)
解决方案:
实际上可以分配 Content-ID , Content-Type , Content-Transfer-Encoding &amp; Content-Disposition 到一个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')
这也像魅力一样。
答案 1 :(得分:1)
在你提到这个问题后我调查了这个,很难找到!
验证后,可以通过以下方式设置名称:
msgImage = MIMEImage(fp.read(), name = 'filename')
此外,我维持yagmail
;一个应该可以轻松发送电子邮件的包。我包含了您想要的功能,并刚刚发布了一个新的小更新!
您可以使用yagmail
获取pip install
(或者使用{3}来获取Python 3)。
开始连接:
pip3 install
这只会发送图片:
import yagmail
yag = yagmail.Connect('username', 'password')
它将使用路径末尾的默认命名(在本例中为yag.send('someone@mail.com', contents = ['/local/or/external/image.png'])
)。虽然也可以给别名(所有别名都由dicts完成,如下所示:image.png
该软件包将自行猜测文件内容,也就是说,它会知道您何时在谈论HTML /图像/其他类型的内容,或者当您正在撰写文本时......您可以所有这些只是把它放进contents = [{'/local/or/external/image.png' : 'newfilename'}]
!
另一个例子:
contents
它有许多你可能会觉得有吸引力的其他功能,described and maintained here。