在Python smtplib中附加一个txt文件

时间:2012-03-02 23:30:11

标签: python email smtp

我发送的纯文本电子邮件如下:

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

def send_message():
    msg = MIMEMultipart('alternative')
    s = smtplib.SMTP('smtp.sendgrid.net', 587)
    s.login(USERNAME, PASSWORD)

    toEmail, fromEmail = to@email.com, from@email.com
    msg['Subject'] = 'subject'
    msg['From'] = fromEmail
    body = 'This is the message'

    content = MIMEText(body, 'plain')
    msg.attach(content)
    s.sendmail(fromEmail, toEmail, msg.as_string())

除了这条消息,我想附上一个txt文件'log_file.txt'。我如何在这里附上一个txt文件?

3 个答案:

答案 0 :(得分:40)

以同样的方式,使用msg.attach

from email.mime.text import MIMEText

filename = "text.txt"
f = file(filename)
attachment = MIMEText(f.read())
attachment.add_header('Content-Disposition', 'attachment', filename=filename)           
msg.attach(attachment)

答案 1 :(得分:1)

它对我有用

sender = 'spider@fromdomain.com'
receivers = 'who'

msg = MIMEMultipart()
msg['Subject'] = 'subject'
msg['From'] = 'spider man'
msg['To'] = 'who@gmail.com'
file='myfile.xls'

msg.attach(MIMEText("Labour"))
attachment = MIMEBase('application', 'octet-stream')
attachment.set_payload(open(file, 'rb').read())
encoders.encode_base64(attachment)
attachment.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(file))
msg.attach(attachment)

print('Send email.')
conn.sendmail(sender, receivers, msg.as_string())
conn.close()

答案 2 :(得分:0)

自Python3.6起,我建议开始使用EmailMessage代替MimeMultipart。导入次数更少,行数更少,无需将收件人同时放在邮件标题和SMTP发送方功能参数中。

import smtplib
from email.message import EmailMessage

msg = EmailMessage()
msg["From"] = FROM_EMAIL
msg["Subject"] = "Subject"
msg["To"] = TO_EMAIL
msg.set_content("This is the message body")
msg.add_attachment("This is the file contents", filename="log_file.txt")

s = smtplib.SMTP('smtp.sendgrid.net', 587)
s.login(USERNAME, PASSWORD)
smtp.send_message(msg)