Django send_mail() / EmailMessage with Gmail SMTP has 4-minute delay for new email recipients
I’m facing a consistent email delivery delay when using Django’s built-in send_mail() or EmailMessage functions with Gmail SMTP.
🔧Setup:
- Backend: Django (tested with both send_mail() and EmailMessage)
- SMTP: smtp.gmail.com with App Passwords
- Recipients: New or first-time email addresses (e.g., new Gmail or company emails)
- Sender: Personal Gmail account using App Password (not Google Workspace)
- Observation:
- Emails show up instantly in the sender's Sent folder.
- Recipient receives the email after ~4 minutes delay, only on the first send.
- On re-sending to the same recipient, delivery is almost instant.
📌 This is especially problematic for: Sign-up confirmation, OTP delivery, Real-time alerts or notifications
❌ What I’ve Tried:
- Tested both old and new Gmail accounts.
- Created new and old App Passwords.
- Sent using both send_mail() and EmailMessage.
- Tried different recipient domains (Gmail, Outlook, work domains, etc.).
- Verified there’s no error or SMTP failure — just delay.
🧠 Additional Notes:
- The issue does not occur for known recipients.
- SMTP works fine; it's the delivery to new recipients that lags.
- Server is configured correctly, no IPv6 hangups.
- Delay seems similar to what Gmail does with anti-phishing checks, but I'm unsure if there’s a Django-specific fix or workaround.
❓ Question:
Is this behavior normal when using Gmail SMTP via Django?
Is there a known workaround to eliminate or reduce this delay for new recipients?
Would using OAuth or switching to a transactional email provider (SendGrid, Mailgun, etc.) help eliminate this delay?
that is normal.
When you send the email for the first time there are numerous verifications if you're using a standard email SMTP server.
If you want to improve that behavior i would advise you to use a transationnal email provider.
Solution: Fix Django Email Delay with Gmail SMTP
The 4-minute delay when sending emails to new recipients using Gmail SMTP with Django’s send_mail() or EmailMessage happens because Gmail checks new recipients for spam or phishing. This is normal for Gmail’s SMTP and not a Django issue.
Why the Delay?
• Gmail’s SMTP (smtp.gmail.com) is for personal use, not fast transactional emails.
• New recipient emails trigger Gmail’s anti-spam checks, causing a delay.
• Once a recipient is "known," emails are sent instantly.
Solution:
Use a Transactional Email Service (Best Option)
Services like SendGrid or Mailgun deliver emails quickly and reliably for tasks such as OTPs or sign-up confirmations. These services have free tiers and work well with Django.
Note: Gmail limits you to 100–150 emails/day, which isn’t great for apps.
Recommendation:
Switch to SendGrid or Mailgun for fast, reliable email delivery. Gmail SMTP isn’t built for real-time emails like OTPs or alerts.