Присоединить txt файл в Python smtplib
Я отправляю текстовое сообщение по электронной почте следующим образом:
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 = [email protected], [email protected]
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 файл здесь?
Ответы
Ответ 1
Точно так же, используя 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)
Ответ 2
Это работает для меня
sender = '[email protected]'
receivers = 'who'
msg = MIMEMultipart()
msg['Subject'] = 'subject'
msg['From'] = 'spider man'
msg['To'] = '[email protected]'
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()
Ответ 3
Начиная с 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)