Отправляем email из скрипта Python
Иногда при возникновении ошибок в Python-скриптах нужно автоматически отправить уведомление на электронную почту.
Это особенно полезно для:
- парсеров;
- cron-задач;
- серверных скриптов;
- мониторинга;
- автоматизации;
- резервного копирования.
В этой статье рассмотрим простой пример отправки email через Python с использованием SMTP Яндекс.Почты.
Импорт библиотеки smtplib
Для отправки писем будем использовать стандартную библиотеку Python:
import smtplib
Создаем функцию отправки письма
Напишем функцию:
def send_notification(email, txt):
Где:
email— список получателей;txt— текст сообщения.
Логин и пароль SMTP
Указываем данные учетной записи, с которой будет выполняться отправка:
sender = 'test@yandex.ru'
sender_password = 'password'
Вместо:
test@yandex.ru— указываем свой email;password— пароль от почты или пароль приложения.
Подключение к SMTP-серверу Яндекса
Подключаемся к SMTP по SSL через 465 порт:
mail_lib = smtplib.SMTP_SSL('smtp.yandex.ru', 465)
mail_lib.login(sender, sender_password)
Отправка нескольким получателям
Используем цикл, чтобы можно было отправлять уведомления сразу нескольким адресатам:
for to_item in email:
Формирование заголовка письма
Формируем email-заголовки:
msg = (
'From: %s\r\n'
'To: %s\r\n'
'Content-Type: text/plain; charset="utf-8"\r\n'
'Subject: %s\r\n\r\n'
) % (
sender,
to_item,
'Тема сообщения'
)
Добавление текста сообщения
Добавляем текст письма:
msg += txt
Отправка письма
Отправляем сообщение в UTF-8:
mail_lib.sendmail(
sender,
to_item,
msg.encode('utf8')
)
Закрытие соединения
После отправки писем закрываем SMTP-соединение:
mail_lib.quit()
Полный код функции
import smtplib
def send_notification(email, txt):
sender = 'test@yandex.ru'
sender_password = 'password'
mail_lib = smtplib.SMTP_SSL(
'smtp.yandex.ru',
465
)
mail_lib.login(
sender,
sender_password
)
for to_item in email:
msg = (
'From: %s\r\n'
'To: %s\r\n'
'Content-Type: text/plain; charset="utf-8"\r\n'
'Subject: %s\r\n\r\n'
) % (
sender,
to_item,
'Тема сообщения'
)
msg += txt
mail_lib.sendmail(
sender,
to_item,
msg.encode('utf8')
)
mail_lib.quit()
Пример использования
send_notification(
['admin@example.com'],
'Ошибка в работе скрипта'
)
Важный момент для Яндекс.Почты
В современных аккаунтах Яндекса может потребоваться:
- включить SMTP-доступ;
- использовать пароль приложения вместо обычного пароля;
- подтвердить вход в аккаунт.
Итог
С помощью стандартной библиотеки smtplib можно быстро настроить отправку email-уведомлений из Python.
Такой способ отлично подходит для:
- логирования ошибок;
- мониторинга серверов;
- cron-задач;
- автоматических уведомлений;
- резервного копирования.
Комментарии