Решение ошибки SMTP AUTH в Python: отправка Gmail-писем

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

В Python для отправки электронной почты через сервер Gmail можно использовать библиотеку smtplib, которая обеспечивает возможность открыть клиентскую сессию SMTP. Ниже представлен код:

Python
Скопировать код
import smtplib
from email.message import EmailMessage

# Формирование сообщения
message = EmailMessage()
message['Subject'] = 'Тема сообщения'
message['From'] = 'Ваш_Почтовый_Адрес_Gmail@gmail.com'
message['To'] = 'получатель@пример.com'
message.set_content('Вечный двигатель — это миф!')

# Отправка мудрости в мир
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp:
    smtp.login('Ваш_Почтовый_Адрес_Gmail@gmail.com', 'Пароль_Приложения')
    smtp.send_message(message)

Здесь Ваш_Почтовый_Адрес_Gmail@gmail.com и Пароль_Приложения следует заменить на свой адрес Gmail и пароль приложения соответственно.

Кинга Идем в IT: пошаговый план для смены профессии

Обеспечение безопасности действий

Google рекомендует использовать пароли приложений для обеспечения безопасности при доступе к сервисам Gmail из сторонних программ. Пароль приложения можно создать после включения двухфакторной аутентификации.

Если вы столкнулись с ошибкой SMTPAuthenticationError, вероятно, необходимо отключить CAPTCHA для своей учетной записи или разрешить доступ "менее защищенным приложениям" в настройках Google.

При использовании server.starttls() следует подключаться через порт 587, причем обязательно выполните server.ehlo() до и после server.starttls(). Если возникут проблемы, лучше использовать smtplib.SMTP_SSL с портом 465.

Обработка ошибок и очистка

Рекомендуется обрабатывать исключения при отправке почты:

Python
Скопировать код
try:
    # Отправка письма
except Exception as e:
    print(f'Не удалось отправить письмо: {e}')
finally:
    # Закрытие соединения
    server.quit()

Для гарантированного закрытия соединения с сервером используйте server.quit().

Когда smtplib не справляется — используйте Gmail API

Если вам необходимо расширить возможности и улучшить безопасность, можно использовать Gmail API с авторизацией через OAuth2. Это потребует создания проекта в Google Developers Console, активации Gmail API и получения данных для OAuth2.

Визуализация

Процесс отправки письма можно представить так:

Markdown
Скопировать код
📬 [ Код Python ] -> [ SMTP-сервер Gmail ] -> 📭 [ Почтовый ящик получателя ]
  1. Создание письма с помощью email.message.EmailMessage().
  2. Подключение к серверу через login.
  3. Отправка письма с помощью .send_message().
  4. Gmail доставляет письмо.

Пример отправки письма:

Python
Скопировать код
import smtplib
from email.message import EmailMessage

# Формирование письма
email = EmailMessage()
email['From'] = 'your_email@gmail.com'
email['To'] = 'recipient@example.com'
email['Subject'] = 'Тема письма'
email.set_content('Не забудь купить бананов по пути домой!')

# Отправка через SMTP-сервер Gmail
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as server:
    server.login('your_email@gmail.com', 'app_password')
    server.send_message(email)

# Письмо доставлено!

Перед отправкой убедитесь, что в настройках Gmail включена функция API.

Расширяем возможности: отправка писем нескольким получателям и HTML-содержимое

Для отправки сообщений нескольким получателям, модифицируйте поле 'To':

Python
Скопировать код
recipients = ['user1@gmail.com', 'user2@gmail.com']
email['To'] = ', '.join(recipients)

Использование HTML в письме требует применения подклассов MIME. Просто прикрепите их к объекту EmailMessage.

Будьте терпеливы

Иногда для вступления в силу изменений безопасности в Gmail требуется время. Не стоит беспокоиться.

Если smtplib кажется сложной, попробуйте yagmail — этот модуль значительно упрощает работу с Gmail.

Полезные материалы