Николаев Виталий
Блог веб-разработчика: Битрикс, PHP, Python, Linux и SEO
Python Python
22.08.2019

Отправляем email из скрипта Python

Отправляем 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-задач;
  • автоматических уведомлений;
  • резервного копирования.
33 просмотров

Комментарии

Где заказы?
Почему у одних компаний очередь из клиентов, а у других пустой сайт и тишина?
Телеграм канал «Где заказы?» — про продажи, сайты и ошибки бизнеса на реальных примерах. Подписаться