Python, отправляем письма

Встала необходимость отправлять некоторые файлы с сервера, в целом можно было бы воспользоваться утилитами системы. Такие, как - 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 »