Отправка писем на Python по SMTP

По работе с почтой на Python с помощью SMTPlib в сети довольно много материалов, но попавшиеся мне примеры, описывали smtp подключение без шифрования, хотя популярные почтовые сервисы давно работают только с ним — yandex, mail.ru и тем более google.

В большинстве примеров с SSL перед авторизацией и отправкой почты делается вызов метода starttls():

Но у меня этот код не заработал. После некоторых поисков на stackoverflow попался совет использовать SMTP_SSL вместо SMTP, в результате была написана следующая функция:

Переменная sender, объявленная внутри функции, принимает значение от кого отправляем письмо, sender_password — соответственно пароль отправителя.
Входные параметры функции:
to — массив получателей письма (часто получателями являются разработчик и клиент, поэтому массив, а не строка)
subject — тема письма
message — текст письма.

Пример вызова функции:

Т.к. в Content-Type указано text/html, то можно использовать HTML-теги, в частности <br> для перевода строки. Если поставить text/plain, то переход на новую строку будет символами \r\n.

Функция работает на Python 2.7, но на Python 3.6 получил проблемы с кодировкой для русских символов:

Свой скрипт я запускал на Windows 10, так что у Вас этой проблемы может не быть. У меня оперативно исправить ошибку не получилось, поэтому пока забил. Письма на английском отправляются без проблем.

Так же письма не сохраняются в папке «Отправленные» на почтовом сервере. Если это нужно , то требуется их положить на сервер по протоколу IMAP.

Источники:
Официальная документация (для тех, кто хорошо знает английский):
https://docs.python.org/2/library/smtplib.html
https://docs.python.org/2/library/email.html
https://docs.python.org/2/library/email-examples.html
Оригинальную функцию взял отсюда: http://python-3.ru/page/otpravka-pisem-iz-python-smtplib
Здесь помимо прочего описано как добавить вложение: https://python-scripts.com/send-email-smtp-python
Ответ, в котором нашлось решение: https://stackoverflow.com/questions/24672079/send-email-using-smtp-ssl-port-465

Читайте также:

1 комментарий

  1. Пётр Зайцев:

    В python3, чтобы отправлять кириллицу, письмо надо заэнкодить с помощью utf8.
    Это можно сделать с помощью команды .encode()


    mail_lib.sendmail(sender, to_item, msg.encode('utf8')

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *