发送python电子邮件时添加excel文件附件

发送python电子邮件时添加excel文件附件,python,email,document,attachment,Python,Email,Document,Attachment,使用python发送电子邮件时,如何添加文档附件? 我收到了要发送的电子邮件 (请忽略:我每5秒循环发送一次电子邮件,仅用于测试目的,我希望它每30分钟发送一次,只需将5更改为1800) 这是到目前为止我的代码。如何从计算机中附加文档 #!/usr/bin/python import time import smtplib while True: TO = 'xxxx@gmail.com' SUBJECT = 'Python Email' TEXT = 'Here i

使用python发送电子邮件时,如何添加文档附件? 我收到了要发送的电子邮件 (请忽略:我每5秒循环发送一次电子邮件,仅用于测试目的,我希望它每30分钟发送一次,只需将5更改为1800)

这是到目前为止我的代码。如何从计算机中附加文档

#!/usr/bin/python

import time
import smtplib

while True:
    TO = 'xxxx@gmail.com'
    SUBJECT = 'Python Email'
    TEXT = 'Here is the message'

    gmail_sender = 'xxxx@gmail.com'
    gmail_passwd = 'xxxx'

    server = smtplib.SMTP('smtp.gmail.com',587)
    server.ehlo()
    server.starttls()
    server.ehlo()
    server.login(gmail_sender, gmail_passwd)
    BODY = '\n'.join([
        'To: %s' % TO,
        'From: %s' % gmail_sender,
        'Subject:%s' % SUBJECT,
        '',
        TEXT

        ])

    try:
        server.sendmail(gmail_sender,[TO], BODY)
        print 'email sent'
    except:
        print 'error sending mail'

    time.sleep(5)

server.quit()

要发送附件,请创建MIMEMultipart对象并将附件添加到该对象中。下面是python的一个示例


这是为我工作的代码——用python发送带有附件的电子邮件

#!/usr/bin/python
import smtplib,ssl
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email.utils import formatdate
from email import encoders

def send_mail(send_from,send_to,subject,text,files,server,port,username='',password='',isTls=True):
    msg = MIMEMultipart()
    msg['From'] = send_from
    msg['To'] = send_to
    msg['Date'] = formatdate(localtime = True)
    msg['Subject'] = subject
    msg.attach(MIMEText(text))

    part = MIMEBase('application', "octet-stream")
    part.set_payload(open("WorkBook3.xlsx", "rb").read())
    encoders.encode_base64(part)
    part.add_header('Content-Disposition', 'attachment; filename="WorkBook3.xlsx"')
    msg.attach(part)

    #context = ssl.SSLContext(ssl.PROTOCOL_SSLv3)
    #SSL connection only working on Python 3+
    smtp = smtplib.SMTP(server, port)
    if isTls:
        smtp.starttls()
    smtp.login(username,password)
    smtp.sendmail(send_from, send_to, msg.as_string())
    smtp.quit()

这里只是上面足球运动员的帖子上的一个小小的调整,让我99%的成功。我找到了一个片段,让我走完了剩下的路。我没有功劳。只是张贴,以防它有助于下一个人

file = 'File.xlsx'
username=''
password=''
send_from = ''
send_to = 'recipient1 , recipient2'
Cc = 'recipient'
msg = MIMEMultipart()
msg['From'] = send_from
msg['To'] = send_to
msg['Cc'] = Cc
msg['Date'] = formatdate(localtime = True)
msg['Subject'] = ''
server = smtplib.SMTP('smtp.gmail.com')
port = '587'
fp = open(file, 'rb')
part = MIMEBase('application','vnd.ms-excel')
part.set_payload(fp.read())
fp.close()
encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment', filename='Name File Here')
msg.attach(part)
smtp = smtplib.SMTP('smtp.gmail.com')
smtp.ehlo()
smtp.starttls()
smtp.login(username,password)
smtp.sendmail(send_from, send_to.split(',') + msg['Cc'].split(','), msg.as_string())
smtp.quit()

我找到了一种简单的方法,使用Corey Shafer在关于使用python发送电子邮件的文章中解释的方法

import smtplib
from email.message import EmailMessage

SENDER_EMAIL = "sender_email@gmail.com"
APP_PASSWORD = "xxxxxxx"

def send_mail_with_excel(recipient_email, subject, content, excel_file):
    msg = EmailMessage()
    msg['Subject'] = subject
    msg['From'] = SENDER_EMAIL
    msg['To'] = recipient_email
    msg.set_content(content)

    with open(excel_file, 'rb') as f:
        file_data = f.read()
    msg.add_attachment(file_data, maintype="application", subtype="xlsx", filename=excel_file)

    with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp:
        smtp.login(SENDER_EMAIL, APP_PASSWORD)
        smtp.send_message(msg)

另外,我的文件是一个excel文件,这是另一个堆栈溢出回答,它显示了如何将任何文件编码为mime附件。这对我来说更容易理解和使用,感谢您阅读
xlsx
正确的子类型应该是
vnd.openxmlformats officedocument.spreadsheetml.sheet
这是最新的工作解决方案,Guy工作得很好,但试图通过此行中的变量发送文件名:
part.add_头('Content-Disposition','attachment;filename=“WorkBook3.xlsx'))
我想从参数列表中添加文件的地方,然后是文件名本身,例如
part.add_header('Content-Disposition','attachment;filename=files')
import smtplib
from email.message import EmailMessage

SENDER_EMAIL = "sender_email@gmail.com"
APP_PASSWORD = "xxxxxxx"

def send_mail_with_excel(recipient_email, subject, content, excel_file):
    msg = EmailMessage()
    msg['Subject'] = subject
    msg['From'] = SENDER_EMAIL
    msg['To'] = recipient_email
    msg.set_content(content)

    with open(excel_file, 'rb') as f:
        file_data = f.read()
    msg.add_attachment(file_data, maintype="application", subtype="xlsx", filename=excel_file)

    with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp:
        smtp.login(SENDER_EMAIL, APP_PASSWORD)
        smtp.send_message(msg)