跨所有应用程序替换django.core.mail.send_mail()?

问题描述:

是否可以使用自定义send_mail()来替换跨整个项目(包括INSTALLED_APPS中的第三方项目)django.core.mail.send_mail()的呼叫?跨所有应用程序替换django.core.mail.send_mail()?

我正在将django-mailer与我的项目集成在一起,该项目为django.core.mail.send_mail()提供替换send_mail()。由于都使用相同的函数签名的文档建议在进口地的Django的邮件版本在那里你通常导入的Django提供的版本,像这样:

# favour django-mailer but fall back to django.core.mail 
from django.conf import settings 

if "mailer" in settings.INSTALLED_APPS: 
    from mailer import send_mail 
else: 
    from django.core.mail import send_mail 

这适用于自己的应用程序代码,但我d还希望在使用django.core.mail.send_mail()的第三方应用程序中进行相同的更改。现在,当这些应用程序尝试发送电子邮件时,我遇到了错误。

Django是否提供任何钩子来取代django.core.mail.send_mail(),或者是否有解决方法?现在我正在寻找每个发送电子邮件并在上面添加条件导入代码的第三方项目,但显然这并不理想。

Django的有email backends,让您可以覆盖从django.core.mail电子邮件发送的方式,而不是通过SMTP去。有一些可以让你在本地保存等等; django-mailer还包括一个(as described in usage.txt)来完成你想要做的事情。