Nikovit <Путешествия и разработка>

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

email.jpg

Иногда при возникновении ошибки в работе скрипта Python нам нужно отправить сообщение на почту, ниже я приведу пример скрипта которым сам пользуюсь.

Отправлять письмо из Python будем с яндекс почты.
Импортируем стандартную библиотеку python для отправки сообщения
import smtplib

Напишем функцию отправки:
def send_notification(email, txt):
Где: emal - адрес получателя, а txt - текст сообщения

Логин и пароль учетной записи с которой будем отправлять сообщение:
sender = 'test@yandex.ru'
sender_password = 'password'

Соединяемся с сервером по 465 порту и проходим авторизацию.
mail_lib = smtplib.SMTP_SSL('smtp.yandex.ru', 465)
mail_lib.login(sender, sender_password)

Создаем цикл отправки, т.к. у нас могут быть несколько адресатов.
for to_item in email:

Формируем заголовок сообщения:
msg = 'From: %s\r\nTo: %s\r\nContent-Type: text/plain; charset="utf-8"\r\nSubject: %s\r\n\r\n' % (
sender, to_item, 'Тема сообщения')
Объединяем заголовок и текст сообщения из параметра функции:
msg += txt

Отправляем сообщения закодировав его в UTF-8
mail_lib.sendmail(sender, to_item, msg.encode('utf8'))

Разрываем соединение с сервером:
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\nTo: %s\r\nContent-Type: text/plain; charset="utf-8"\r\nSubject: %s\r\n\r\n' % (
        sender, to_item, 'Тема сообщения')
        msg += txt
        mail_lib.sendmail(sender, to_item, msg.encode('utf8'))
    mail_lib.quit()


0
LzrdDragon
09.05.2022 23:21:27
А email объект, по которому ты бежишь в цикле ты где объявляешь? Его нет просто в коде твоём, это даже не запустится (интерпретатор не схавает такое банально, тут ошибка синтаксиса)
0
LzrdDragon
09.05.2022 23:23:11
И txt туда же (переменная - её нет)
0
LzrdDragon
09.05.2022 23:25:14
Ладно, увидел, что ты функцию объявляешь и это параметры, зря быканул
0
12.05.2022 11:54:45
ну да, вызываем функцию например так:
send_notification(admin@mail.ru, 'текст сообщения')
0
LzrdDragon
12.05.2022 20:07:04
Да, я понял, спасибо (не заметил там функцию в принципе, изначально)
0
Роман
08.06.2022 14:25:40
 Error: authentication failed: This user does not have access rights to this service
И че делать?
0
09.06.2022 09:55:08
В настройках яндекс почты в разделе "Почтовые программы" нужно разрешить доступ, поставить галочки в пунктах "Разрешить доступ к почтовому ящику с помощью почтовых клиентов"