如何在Django中配置多个邮件后端?
Django同时使用SMTP和Console邮件后端的正确配置
Django 默认不支持直接通过列表形式配置多个EMAIL_BACKEND,你给出的EMAIL_BACKEND = ["django.core.mail.backends.smtp.EmailBackend", "django.core.mail.backends.console.EmailBackend"]配置会导致报错。要实现同时通过SMTP发送邮件并在控制台打印邮件内容,需要自定义一个邮件后端来整合这两个功能:
步骤1:创建自定义邮件后端
在你的Django项目任意一个app下新建backends.py文件,写入以下代码:
from django.core.mail.backends.base import BaseEmailBackend from django.core.mail.backends.smtp import EmailBackend from django.core.mail.backends.console import EmailBackend as ConsoleEmailBackend class MultiEmailBackend(BaseEmailBackend): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # 初始化SMTP后端 self.smtp_backend = EmailBackend(*args, **kwargs) # 初始化Console后端 self.console_backend = ConsoleEmailBackend(*args, **kwargs) def send_messages(self, email_messages): # 用SMTP发送邮件 smtp_sent = self.smtp_backend.send_messages(email_messages) # 在控制台打印邮件 console_sent = self.console_backend.send_messages(email_messages) # 返回成功发送的邮件总数 return smtp_sent + console_sent
步骤2:配置settings.py
将EMAIL_BACKEND指向你刚创建的自定义后端,同时保留SMTP的相关配置:
# 自定义邮件后端路径,替换成你的app名称 EMAIL_BACKEND = "your_app_name.backends.MultiEmailBackend" # SMTP相关配置(根据你的实际情况修改) EMAIL_HOST = 'smtp.example.com' EMAIL_PORT = 587 EMAIL_USE_TLS = True EMAIL_HOST_USER = 'your_email@example.com' EMAIL_HOST_PASSWORD = 'your_email_password' DEFAULT_FROM_EMAIL = 'your_email@example.com'
这样配置后,当你调用Django的邮件发送API时,邮件会同时通过SMTP发送出去,并且在控制台输出邮件的内容和相关信息。
内容的提问来源于stack exchange,提问作者c p
相关产品推荐
相关产品推荐

