django 1.11默认EmailBackend使用微软企业邮箱发送邮件速度慢

It's slow to send email by the default EmailBackend of django 1.11 using Microsoft business email account

我使用的是 Django 1.11 的默认 EmailBackend,我只是简单地调用了 send_mail 方法作为 ref。文档说,这是我的 SMTP 服务器设置:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp-mail.outlook.com'
EMAIL_PORT = '587'
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'oalite@xxx.com'
EMAIL_HOST_PASSWORD = 'xxxxx'
EMAIL_SUBJECT_PREFIX = '[OALite Admin]'

这是我smtplib.py输出的日志:

reply: b'250-CHUNKING\r\n'
reply: b'250 SMTPUTF8\r\n'
reply: retcode (250); Msg: b'SG2PR06CA0180.outlook.office365.com Hello [85.203.47.85]\nSIZE 157286400\nPIPELINING\nDSN\nENHANCEDSTATUSCODES\nAUTH LOGIN XOAUTH2\n8BITMIME\nBINARYMIME\nCHUNKING\nSMTPUTF8'
send: 'AUTH LOGIN b2FBaXRl0GlyaXhpLmNvb0==\r\n'
reply: b'334 UGFzc3dvcmQ6\r\n'
reply: retcode (334); Msg: b'UGFzc3dvcmQ6'
send: 'QEdBbH1w0DJuSwY=\r\n

>>>>>>>>>>>>>>>>>> halted here for about 15s to wait the reply <<<<<<<<<<<<<<<<<<<

reply: b'235 2.7.0 Authentication successful target host BLUPR04MB420.namprd04.prod.outlook.com\r\n'
reply: retcode (235); Msg: b'2.7.0 Authentication successful target host BLUPR04MB420.namprd04.prod.outlook.com'
send: 'mail FROM:<oalite@xxx.com> size=943\r\n'
reply: b'250 2.1.0 Sender OK\r\n'
reply: retcode (250); Msg: b'2.1.0 Sender OK'
send: 'rcpt TO:<user.foo@xxx.com>\r\n'
reply: b'250 2.1.5 Recipient OK\r\n'

请注意,我使用的是微软的企业邮箱,域名xxx.com实际上是我们公司的域名。

我不知道为什么需要 15 秒来验证,使用相同帐户的 outlook 桌面应用程序发送电子邮件非常快。使用 Exchange 协议是否比使用 SMTP 协议更快?

感谢您的帮助!

当身份验证速度较慢时,用于从视图快速发送外发邮件的几个选项:

  • 使用 celery 将邮件发送卸载到离线任务。
  • 在您的主机上安装本地(转发)邮件服务器。在 linux 上,这可以通过 postfix 轻松完成。您可以配置邮件服务器以连接到您的企业电子邮件帐户。
  • 两个:-)

似乎有一个 REST API to connect to outlook.com - so you can also write your own mail backend 用于通过 HTTP 发送邮件。