Как отправить письмо через smtplib

Python умеет отправлять письма (email) из своей стандартной библиотеки smtplib. Из этой статьи вы узнаете какой код написать и как настроить свою учетку на Яндекс Почте или Gmail.

Скрипт на Python

import smtplib


email_from = 'sender@yandex.ru'  # укажите свой email-адрес
password = 'place-password-here'  # укажите пароль в почтовому ящику выше

email_to = 'receiver@yandex.ru'  # укажите адрес получателя письма

letter = f'''
From: {email_from}
To: {email_to}
Subject: Заголовок письма
Content-Type: text/plain; charset="UTF-8";

Тело письма
'''

server = smtplib.SMTP_SSL('smtp.yandex.com:465')
server.login(email_from, password)

server.sendmail(email_from, email_to, letter.encode('utf-8'))
server.quit()

Настройки для Gmail

Чтобы рассылать письма через почту на Gmail нужны небольшие изменения в скрипте.

Первым делом поменяйте адрес сервера. Раньше был указан адрес Яндекс Почты, поменяйте на Gmail:

...
server = smtplib.SMTP_SSL('smtp.yandex.com:465')
...

Стало:

...
server = smtplib.SMTP_SSL('smtp.gmail.com:587')
...

При запуске кода вы можете получить ошибку SSL такого вида:

smtplib ssl.SSLError: [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1131)

Проблема связана с устаревшей версией протокола шифрования SSL. Чинится ошибка добавлением ещё нескольких строк кода с явным указанием номера версии. Подробно проблема обсуждается на StackOverflow.

...
server = smtplib.SMTP('smtp.gmail.com:587')

import ssl  # переместите в шапку файла
context = ssl.SSLContext(ssl.PROTOCOL_TLS)

server.ehlo()
server.starttls(context=context)
server.ehlo()
...

При запуске код либо заработает, либо вывалится ошибка с кодом 535-5.7.8:

SMTPAuthenticationError 535-5.7.8 Username and Password not accepted

Эта ошибка связана с настройками безопасности на Gmail. Зайдите из-под своего аккаунта на страницу Ненадежные приложения и разрешите доступ “Небезопасным приложениям”. Подробно проблема обсуждается на StackOverlfow.


Попробуйте бесплатные уроки по Python

Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.

Переходите на страницу учебных модулей «Девмана» и выбирайте тему.