Решение ошибки SMTP AUTH в Python: отправка Gmail-писем
Быстрый ответ
В Python для отправки электронной почты через сервер Gmail можно использовать библиотеку smtplib
, которая обеспечивает возможность открыть клиентскую сессию SMTP. Ниже представлен код:
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 и пароль приложения соответственно.
Обеспечение безопасности действий
Google рекомендует использовать пароли приложений для обеспечения безопасности при доступе к сервисам Gmail из сторонних программ. Пароль приложения можно создать после включения двухфакторной аутентификации.
Если вы столкнулись с ошибкой SMTPAuthenticationError
, вероятно, необходимо отключить CAPTCHA для своей учетной записи или разрешить доступ "менее защищенным приложениям" в настройках Google.
При использовании server.starttls()
следует подключаться через порт 587, причем обязательно выполните server.ehlo()
до и после server.starttls()
. Если возникут проблемы, лучше использовать smtplib.SMTP_SSL
с портом 465.
Обработка ошибок и очистка
Рекомендуется обрабатывать исключения при отправке почты:
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.
Визуализация
Процесс отправки письма можно представить так:
📬 [ Код Python ] -> [ SMTP-сервер Gmail ] -> 📭 [ Почтовый ящик получателя ]
- Создание письма с помощью
email.message.EmailMessage()
. - Подключение к серверу через login.
- Отправка письма с помощью
.send_message()
. - Gmail доставляет письмо.
Пример отправки письма:
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':
recipients = ['user1@gmail.com', 'user2@gmail.com']
email['To'] = ', '.join(recipients)
Использование HTML в письме требует применения подклассов MIME
. Просто прикрепите их к объекту EmailMessage
.
Будьте терпеливы
Иногда для вступления в силу изменений безопасности в Gmail требуется время. Не стоит беспокоиться.
Если smtplib
кажется сложной, попробуйте yagmail
— этот модуль значительно упрощает работу с Gmail.