繁体   English   中英

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

[英]Sending attachment in HTML email with Python

我看到已经有一些关于堆栈溢出的类似问题,但我无法在其中找到解决我的特定问题的方法。

我正在尝试使用 Python 发送带有 .pdf 附件的 HTML 电子邮件。 当我在 gmail.com 上查看我的电子邮件时,它似乎工作正常,但是当我通过 Apple 的邮件程序查看邮件时,我没有看到附件。 知道是什么原因造成的吗?

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

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')

而不是“替代”

要同时拥有文本、html 和附件,必须同时使用混合和替代部分。

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText

text = "This is the plain text version."
html = "<html><p>This is some HTML</p></html>"
text_part = MIMEText(text, 'plain')
html_part = MIMEText(html, 'html')

msg_alternative = MIMEMultipart('alternative')
msg_alternative.attach(text_part)
msg_alternative.attach(html_part)

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

msg_mixed = MIMEMultipart('mixed')
msg_mixed.attach(msg_alternative)
msg_mixed.attach(attachment)
msg_mixed['From'] = 'me@gmail.com'
msg_mixed['To'] = 'you@gmail.com'
msg_mixed['Subject'] = 'Deliverability Report'

smtp_obj = smtplib.SMTP('SERVER', port=25)
smtp_obj.ehlo()
smtp_obj.login('NAME', 'PASSWORD')
smtp_obj.sendmail(msg_mixed['From'], msg_mixed['To'], msg_mixed.as_string())
smtp_obj.quit()

消息结构应该是这样的:

混合:

  • 替代方案:
    • 文字
    • HTML
  • 附件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM