Django smtp 电子邮件后端降低性能

Django smpt email backend slowing down performance

我developing/serving目前在本地。

我正在使用 django-admin 供内部用户添加项目。

我添加了我的信号代码。我的信号是 post_save,目的是向用户发送电子邮件以供批准。我使用 console.EmailBackend

测试我的信号
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

我添加了一个新项目,对网络浏览器没有性能影响。我的模型项目页面重新加载很快。

我更新我的 EMAIL_BACKEND 也使用 smpt 详细信息

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'

我添加了一个新项目,性能影响很大,我的网络浏览器现在需要 15-30 秒才能在添加后重新加载项目页面。

有没有想过为什么性能如此糟糕?

真正的电子邮件发送本质上是缓慢的。

我推荐推荐使用异步队列任务发送电子邮件。例如 Celery 是 asynchronous Queue task.

的好库

如果您计划 运行 在 AWS 或类似平台上使用您的应用程序,请考虑使用电子邮件发送服务(例如 AWS 的 SES)。它可以让您设置发件人验证 (DKIM/SPF),并且它将是一个低延迟 API 调用,而不是缓慢的 SMTP 交互。如果您打算使用 AWS,已经有一个库 django-ses,您可以配置它并立即开始使用。

如果您想自己继续发送电子邮件,请使用 celery or channels 设置异步任务队列和工作程序。这种延迟将使您的网络工作者继续处理请求,同时工作者完成缓慢的发送过程。

如果您想要一个非常快速的设置,您可以结合上述两种方法,将电子邮件发送到异步工作者,然后它会点击电子邮件即服务 API。您的 web worker 会很活泼,并且您的异步 worker 不会被阻止与 SMTP 服务器通话 10-15 秒!