Python 是否将pdf文件附加到电子邮件?

Python 是否将pdf文件附加到电子邮件?,python,python-3.x,email,pdf,python-3.6,Python,Python 3.x,Email,Pdf,Python 3.6,我正在尝试设置一个自动电子邮件发送脚本。我正在使用电子邮件模块和email.message模块中的EmailMessage对象,并正在使用smtplib模块发送电子邮件。我希望能够将.pdf文件附加到电子邮件中,但是add_attachment()方法的EmailMessage()文档不是很有用,我甚至不确定是否应该使用它 以下是我到目前为止删除的无关信息: import time import smtplib from email.message import EmailMessage FR

我正在尝试设置一个自动电子邮件发送脚本。我正在使用电子邮件模块和
email.message
模块中的
EmailMessage
对象,并正在使用
smtplib
模块发送电子邮件。我希望能够将.pdf文件附加到电子邮件中,但是
add_attachment()
方法的
EmailMessage()
文档不是很有用,我甚至不确定是否应该使用它

以下是我到目前为止删除的无关信息:

import time
import smtplib
from email.message import EmailMessage

FROM = 'my email'

s = smtplib.SMTP('smtp.gmail.com', 587)
s.ehlo()
s.starttls()
s.login('my email', 'password')

for line in open('to.csv'):
    line = line.strip()
    fields = line.split(',')

    subject = 'subject'

    email = EmailMessage()

    email['Subject'] = 'subject'
    email['From'] = FROM
    email['To'] = 'to email'


    s.send_message(email)

    print('Sent to {0}'.format(fields[TO]))

    time.sleep(5)

s.quit()

如何附加pdf文件?我搜索并看到一个答案是使用MIMEText对象添加附件,但它似乎无法使用pdf。。。但我就是这么做的:

email = EmailMessage()

email['Subject'] = 'subject'
email['From'] = FROM
email['To'] = 'to email'

with open('example.pdf', 'rb') as content_file:
    content = content_file.read()
    email.add_attachment(content, maintype='application', subtype='pdf', filename='example.pdf')

s.send_message(email)

顺便说一句,这不是一个重复的问题,在这个问题中,他使用EmailMessage,不使用MIMEText/MIMEPart等。

答案太晚了。。。但我就是这么做的:

email = EmailMessage()

email['Subject'] = 'subject'
email['From'] = FROM
email['To'] = 'to email'

with open('example.pdf', 'rb') as content_file:
    content = content_file.read()
    email.add_attachment(content, maintype='application', subtype='pdf', filename='example.pdf')

s.send_message(email)

顺便说一句,这不是一个重复的问题,在这个问题上,他使用EmailMessage,而不使用MIMEText/MIMEPart等。

可能的重复可能的重复可能的重复可能的重复简短、简洁、高度可用的重复。这应该是包含在中的示例之一。当然
maintype
这里应该是
application
?@SColvin yes。我可以确认
main Type='application/pdf'
会导致
Content-Type:application/pdf/pdf
,尽管大多数客户端不会在意,他们会通过查看附件文件名中的
.pdf
来进行自己的MIME嗅探。编辑了答案。简短、简洁、实用性强。这应该是包含在中的示例之一。当然
maintype
这里应该是
application
?@SColvin yes。我可以确认
main Type='application/pdf'
会导致
Content-Type:application/pdf/pdf
,尽管大多数客户端不会在意,他们会通过查看附件文件名中的
.pdf
来进行自己的MIME嗅探。编辑了答案。