Python, отправляем письма
Fri 10 February 2023Встала необходимость отправлять некоторые файлы с сервера, в целом можно было бы воспользоваться утилитами системы. Такие, как - mutt например, или можно было бы написать с простой скрипт на bash/sh. Но как истинный падаван Python-а, я пойду по его пути. Скрипт практически целиком взять из документации по библиотеке smtplib и email. И по-хорошему в него необходимо добавить параметры командной строки и прочее очеловечивание. Но это заметка скорее для себя, так что, можно просто изменить его под себя, если хотите.
import smtplib
from email import encoders
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
subject = "An email with attachment from Python"
body = "This is an email with attachment sent from Python"
sender_email = 'your_email_address'
receiver_email = ''
password = 'your_password_here'
smtp_server = 'smtp.email-server.addr'
smtp_port = 465
message = MIMEMultipart()
message["From"] = sender_email
message["To"] = receiver_email
message["Subject"] = subject
message["Bcc"] = receiver_email
message.attach(MIMEText(body, "plain"))
filename = "document.pdf"
with open(filename, "rb") as attachment:
part = MIMEBase("application", "octet-stream")
part.set_payload(attachment.read())
encoders.encode_base64(part)
part.add_header( "Content-Disposition", f"attachment; filename= {filename}",)
message.attach(part)
text = message.as_string()
with smtplib.SMTP(smtp_server, smtp_port) as server:
server.ehlo()
server.starttls()
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, text)
Обратите внимание, я не указываю библиотеке явно что нужно использовать SSL, хотя при этом использую директивы:
server.ehlo()
server.starttls()
В зависимости от указанного вами порта, библиотека и скрипт согласуют протокол работы, хотя и его можно указать явно. При тестировании, в логах почтового сервера следующее:
Feb 10 12:06:48 mx1 postfix/smtps/smtpd[268124]: connect from unknown[79.x.x.x]
Feb 10 12:06:48 mx1 postfix/smtps/smtpd[268124]: Anonymous TLS connection established from unknown[79.x.x.x]: TLSv1.2 with cipher ECDHE-RSA-CHACHA20-POLY1305 (256/256 bits)
Feb 10 12:06:48 mx1 postfix/smtps/smtpd[268124]: F0337140153: client=unknown[79.x.x.x], sasl_method=PLAIN, sasl_username=x
Feb 10 12:06:48 mx1 postfix/cleanup[268129]: F0337140153: message-id=<>
Home »