Отправка почты с помощью smtplib

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


Существует немало сторонних библиотек, облегчающих задачу автоматической отправки электронной почты, но в этой статье будет вестись речь об  smtplib. Эта библиотека входит в стандартную библиотеку Python, поэтому не требует никакой установки.


Для примера я возьму задачу организации обратной связи с пользователем посредствам отправки email.

Прежде всего нам нужен почтовый ящик, с которого будут отправляться письма. Вы можете использовать для этого свой агент передачи почты, а я в своем примере буду пользоваться почтой gmail. Использование gmail имеет некоторые особенности о которых я расскажу ниже.

Перейдем к самому скрипту:

import smtplib
from email.mime.text import MIMEText
from email.header import Header

# Настройки
mail_sender = 'youremail@gmail.com'
mail_receiver = 'somebody@gmail.ru'
username = 'youremail@gmail.com'
password = 'top_secret_password'
server = smtplib.SMTP('smtp.gmail.com:587')

# Формируем тело письма
subject = u'Тестовый email от ' + mail_sender
body = u'Это тестовое письмо оптправлено с помощью smtplib'
msg = MIMEText(body, 'plain', 'utf-8')
msg['Subject'] = Header(subject, 'utf-8')

# Отпавляем письмо
server.starttls()
server.ehlo()
server.login(username, password)
server.sendmail(mail_sender, mail_receiver, msg.as_string())
server.quit()


Настройки

После импорта необходимых библиотек мы настраиваем подключение к почтовому ящику отправителя (mail_sender) и вводим почтовый ящик получателя (mail_reciever). В переменных username и password, как можно понять, будут хранится значения логина и пароля почты. Далее идут настройки SMTP сервера электронной почты. Обычно используется 25 порт. Но в моем случае используется gmail, поэтому нужно соблюсти некоторые правила. Поэтому отправка будет осуществляться через 587 порт.

Особенности отправки почты сторонними приложениями через gmail.

Первая особенность - для отправки почты сторонними приложениями, используется TLS, поэтому в настройках SMTP указываем 587 порт.

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


Формируем тело письма

Теперь пришла очередь создания тела письма, в этом нам поможет другая стандартная библиотека - email. В этом простом примере используются лишь базовые возможности библиотеки. Для того чтобы создавать более сложные письма, можно использовать модулю MIMEMultipart входящий в библиотеку email.


Отправка письма

Метод starttls() осуществляет защищенное подключение к серверу Gmail. Метод login() отвечает за аутентификацию на сервере. А метод sendmail отправляет письмо, принимая в качестве параметров адрес отправителя, адрес получателя и само сообщение.


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