使用Python在HTML电子邮件中发送附件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Python在HTML电子邮件中发送附件相关的知识,希望对你有一定的参考价值。

我看到堆栈溢出已经有一些类似的问题,但我无法找到解决我的具体问题的方法。

我正在尝试使用Python发送带有.pdf附件的HTML电子邮件。当我在gmail.com检查我的电子邮件时似乎工作正常,但是当我通过苹果邮件程序查看邮件时,我看不到附件。知道是什么导致了这个吗?

我的代码如下。很多都是从堆栈溢出的各个地方复制的,所以我不完全理解每个部分正在做什么,但它似乎(大多数)工作:

import smtplib  
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText                    
from email.mime.application import MIMEApplication
from os.path import basename
import email
import email.mime.application

#plain text version
text = "This is the plain text version."

#html body
html = """<html><p>This is some HTML</p></html>"""

# Create message container - the correct MIME type is multipart/alternative.
msg = MIMEMultipart('alternative')
msg['Subject'] = "Deliverability Report"
msg['From'] = "me@gmail.com"
msg['To'] = "you@gmail.com"

# Record the MIME types of both parts - text/plain and text/html
part1 = MIMEText(text, 'plain')
part2 = MIMEText(html, 'html')

# create PDF attachment
filename='graph.pdf'
fp=open(filename,'rb')
att = email.mime.application.MIMEApplication(fp.read(),_subtype="pdf")
fp.close()
att.add_header('Content-Disposition','attachment',filename=filename)

# Attach parts into message container.
msg.attach(att)
msg.attach(part1)
msg.attach(part2)

# Send the message via local SMTP server.
s = smtplib.SMTP()
s.connect('smtp.webfaction.com')
s.login('NAME','PASSWORD')
s.sendmail(msg['From'], msg['To'], msg.as_string())
s.quit()

我不确定它是否相关,但我在WebFaction服务器上运行此代码。

谢谢您的帮助!

答案

使用

msg = MIMEMultipart('mixed')

而不是'替代'

以上是关于使用Python在HTML电子邮件中发送附件的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中发送带有 HTML+plain_text 电子邮件的 PDF 附件

python之发送邮件----html + 附件

如何使用exchangelib在python中将熊猫数据框作为电子邮件附件发送

python发送邮件的实例代码(支持html图片附件)

Python:多部分 html 电子邮件通过嵌入式图像和附件发送

Python SMTP 发送带附件电子邮件