我刚刚加入了一个项目,并一直试图弄清楚为什么某些电子邮件在 Gmail 上按应有的方式显示,但是当我使用 Thunderbird 或 Outlook 等客户端打开时,附加的 PDF 现在会显示。
作为附加细节,如果我将邮件从 Thunderbird/Tutlook 转发到 Gmail 帐户,则会显示附加的 pdf,如果我将其发送回 Thunderbird/Outlook 连接的帐户,它会再次出现,因此 Gmail 修复了代码中的错误。
这是我第二次处理电子邮件,第一次主要是复制一些代码来看看它是否有效,所以如果您除了帮助我修复它之外还愿意向我解释它,我将非常感激。
我将在此处发布代码,然后添加一些关于我在下面尝试的内容的附加信息,以使其更加清晰。
所以,这是代码:
from email.message import EmailMessage
from email import encoders
from email.mime.base import MIMEBase
import smtplib
msg = EmailMessage()
msg['Subject'] = subject
msg['From'] = "someaddress"
msg['To'] = user_email
msg.set_content('Certification')
msg.add_alternative("""<!DOCTYPE html>
<html>
<body>
Stuff...
</body>
</html>
""", subtype='html')
filename = 'somefilename'
pdf_filename = 'certificate.pdf'
with open(filename, "rb") as attachment:
part = MIMEBase("application", "octet-stream")
part.set_payload(attachment.read())
encoders.encode_base64(part)
part.add_header(
"Content-Disposition",
"attachment", filename=pdf_filename
)
try:
msg.attach(part)
with smtplib.SMTP('someIP', port) as smtp:
smtp.send_message(msg)
我之前见过一些类似的问题(或者实际上是相同的问题),一些解决方案建议使用 MIMEMultipart 混合消息对象而不是电子邮件对象,如下所示:msg=MIMEMultipart('mixed')
代替msg = EmailMessage()
但因为 add_alternative 不是 MIMEMultipart 方法,所以如果不更改该部分,我就无法做到这一点。
(以上建议是在这个帖子 https://stackoverflow.com/questions/41639660/outlook-and-thunderbird-do-not-receive-attachment-when-i-send-from-python-using- 这与我的问题完全相同,但不幸的是我无法使用相同的修复)
我尝试做的是打电话msg.make_mixed()
below msg=Email.Message()
希望混合类型(我还不了解电子邮件类型)能够解决问题,但是当我尝试以这种方式发送电子邮件时,我得到了 Status=4,无法发送文件,错误。
如果您能为资源提供任何建议,以了解有关发送和接收电子邮件的更多信息(从 python 角度来看),我也将非常感激。
谢谢你!