Django send_mail() / EmailMessage с Gmail SMTP имеет 4-минутную задержку для новых получателей электронной почты
Я сталкиваюсь с постоянной задержкой доставки электронной почты при использовании встроенных в Django функций send_mail() или EmailMessage с Gmail SMTP.
🔧Настройка:
- Серверная часть: Django (протестирована как с помощью send_mail(), так и с помощью EmailMessage)
- SMTP: smtp.gmail.com с паролями от приложений
- Получатели: новые адреса электронной почты или адреса электронной почты, используемые впервые (например, новый Gmail или электронные письма компании)
- Отправитель: Личная учетная запись Gmail с использованием пароля приложения (не Google Workspace)
- Наблюдение:
- Электронные письма мгновенно отображаются в папке отправленных отправителем.
- Получатель получает электронное письмо с задержкой в ~4 минуты, только при первой отправке.
- При повторной отправке тому же получателю доставка происходит практически мгновенно.
📌 Это особенно проблематично для: Подтверждения регистрации, доставки OTP, оповещений в режиме реального времени или уведомлений
❌ Что я пробовал:
- Протестированы как старые, так и новые учетные записи Gmail.
- Созданы новый и старый пароли приложений.
- Отправлено с использованием как send_mail(), так и EmailMessage.
- Пробовал разные домены получателей (Gmail, Outlook, рабочие домены и т.д.).
- Проверено, что ошибки или сбоя SMTP нет — просто задержка.
🧠 Дополнительные примечания:
- Проблема не возникает у известных получателей.
- SMTP работает нормально, но задерживается доставка новым получателям.
- Сервер настроен правильно, зависаний по протоколу IPv6 нет.
- Задержка похожа на то, что Gmail делает с антифишинговыми проверками, но я не уверен, есть ли какое-то конкретное исправление или обходной путь для Django.
❓ Вопрос:
Является ли такое поведение нормальным при использовании Gmail SMTP через Django?
Существует ли известный обходной путь, позволяющий устранить или уменьшить эту задержку для новых получателей?
Поможет ли использование OAuth или переключение на провайдера транзакционной электронной почты (SendGrid, Mailgun и т.д.) устранить эту задержку?
это нормально.
При отправке электронного письма в первый раз необходимо выполнить множество проверок, если вы используете стандартный почтовый SMTP-сервер.
Если вы хотите улучшить это поведение, я бы посоветовал вам воспользоваться услугами международного почтового провайдера.
Решение: Исправьте задержку отправки электронной почты Django с помощью Gmail SMTP
4-минутная задержка при отправке электронных писем новым получателям с помощью Gmail SMTP с помощью Django send_mail() или EmailMessage происходит из-за того, что Gmail проверяет новых получателей на наличие спама или фишинга. Это нормально для SMTP Gmail и не является проблемой Django.
<время работы/>Почему такая задержка?
• SMTP-протокол Gmail (smtp.gmail.com) предназначен для личного использования, а не для быстрой отправки электронных писем.
• Новые электронные письма получателей запускают проверку Gmail на нежелательную почту, что приводит к задержке.
• Как только получатель "известен", электронные письма отправляются мгновенно.
<время работы/>Решение:
Используйте службу электронной почты для транзакций (лучший вариант)
Такие сервисы, как SendGrid или Mailgun, быстро и надежно доставляют электронные письма для таких задач, как OTP или подтверждение регистрации. Эти сервисы имеют бесплатные уровни и хорошо работают с Django.
Примечание: Gmail ограничивает доступ к 100-150 письмам в день, что не очень удобно для приложений.
<время работы/>Рекомендация:
Переключитесь на SendGrid или Mailgun для быстрой и надежной доставки электронной почты. Gmail SMTP не предназначен для отправки электронных писем в режиме реального времени, таких как OTP или оповещения.