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 или оповещения.

Вернуться на верх