Найти в Дзене
Записки сисадмина

Python. Отправка email

Возникла у меня тут необходимость отправлять ежедневные рассылки писем своим коллегам. В недавнем посте я писал, как можно отправлять письма из терминала linux. Однако сами письма формируются python скриптами и не хотелось бы городить отдельные костыли с вызовом bash команд. Итак, начнем: для работы нам понадобится python3 и библиотеки smtplib и email. Также я создал себе почту на домене "noreply@mydomain.com" с паролем "secured_password". Почта для домена у меня подключена к серверам яндекса, так что будем использовать его настройки SMTP. import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.application import MIMEApplication # Логин почты, с которой будем отправлять addr_from = "noreply@mydomain.com" # Пароль от почты, с которой будем отправлять password = "secured_password" # Получатель письма addr_to = "recipient@mydomain.com" # Создаем объект сообщения msg = MIMEMultipart() # Адресат msg['From'] = addr_from # Получател

Возникла у меня тут необходимость отправлять ежедневные рассылки писем своим коллегам.

В недавнем посте я писал, как можно отправлять письма из терминала linux. Однако сами письма формируются python скриптами и не хотелось бы городить отдельные костыли с вызовом bash команд.

Итак, начнем: для работы нам понадобится python3 и библиотеки smtplib и email. Также я создал себе почту на домене "noreply@mydomain.com" с паролем "secured_password". Почта для домена у меня подключена к серверам яндекса, так что будем использовать его настройки SMTP.

  • Создаем скрипт mail_sender.py и импортируем нужные нам модули:
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication

  • Сразу прописываем параметры авторизации:
# Логин почты, с которой будем отправлять
addr_from = "noreply@mydomain.com"
# Пароль от почты, с которой будем отправлять
password = "secured_password"
# Получатель письма
addr_to = "recipient@mydomain.com"

  • Начинаем формировать наше письмо:
# Создаем объект сообщения
msg = MIMEMultipart()
# Адресат
msg['From'] = addr_from
# Получатель
msg['To'] = addr_to
# Тема сообщения
msg['Subject'] = 'Тестовое сообщение'
# Текст сообщения
msg_text = 'Текст нашего сообщения'
# Добавляем в сообщение текст
msg.attach(MIMEText(msg_text, 'plain'))

  • Если мы хотим прикрепить к нему вложение (любой файл, либо несколько файлов), добавляем:
with open('/path/to/our_file.txt', 'rb') as file:
msg.attach(MIMEApplication(file.read(), Name='our_file.txt'))

  • На этом этапе мы сформировали наше текстовое сообщение. Теперь нам необходимо авторизоваться на сервере яндекса и отправить его:
# Создаем объект SMTP
server = smtplib.SMTP_SSL('smtp.yandex.ru', 465)
# Авторизуемся на сервере с нашими учетными данными
server.login(addr_from, password)
# Отправляем сообщение
server.sendmail(msg['From'], msg['To'], msg.as_string())
# Выходим с сервера
server.quit()

Готово! Сообщение было отправлено с нашим вложением.

Теперь обернем все это в отдельную функцию, которую можно будет использовать в разных задачах. В функцию мы будем передавать список получателей, тему и текст письма, а также - список файлов, которые нужно прикрепить.

Код функции выложил здесь.