如何在Django中配置并使用多个SMTP邮箱账户发送邮件?
实现Django多邮箱按主题发送邮件
Django默认的全局邮件配置仅支持单个账户,要实现按邮件主题切换不同邮箱发送,你需要手动创建对应邮箱的SMTP连接,而非依赖全局配置。具体实现步骤如下:
1. 在settings.py中存储多邮箱配置
把所有需要用到的邮箱账户信息整理成字典,方便后续调用:
# settings.py EMAIL_CONFIGS = { 'support': { 'BACKEND': 'django.core.mail.backends.smtp.EmailBackend', 'HOST': 'mail.mysmtpserver.somewhere', 'PORT': 587, 'USER': 'support@example.com', 'PASSWORD': 'support_pass', 'USE_TLS': True }, 'marketing': { 'BACKEND': 'django.core.mail.backends.smtp.EmailBackend', 'HOST': 'mail.mysmtpserver.somewhere', 'PORT': 587, 'USER': 'marketing@example.com', 'PASSWORD': 'marketing_pass', 'USE_TLS': True } }
2. 编写邮件发送工具函数
写一个工具函数,根据邮件主题关键字匹配对应邮箱配置,创建专属SMTP连接后发送邮件:
# utils/email_utils.py from django.core.mail import get_connection, EmailMessage from django.conf import settings def send_email_by_subject(subject, message, recipient_list, from_email=None, fail_silently=False): # 根据主题关键字匹配目标邮箱 if '售后' in subject or 'Support' in subject: config = settings.EMAIL_CONFIGS['support'] elif '营销' in subject or 'Marketing' in subject: config = settings.EMAIL_CONFIGS['marketing'] else: # 无匹配时使用默认邮箱(可根据需求调整) config = settings.EMAIL_CONFIGS['support'] # 创建对应邮箱的SMTP连接 connection = get_connection( backend=config['BACKEND'], host=config['HOST'], port=config['PORT'], username=config['USER'], password=config['PASSWORD'], use_tls=config['USE_TLS'] ) # 构造邮件并发送 email = EmailMessage( subject=subject, body=message, from_email=from_email or config['USER'], # 可自定义发件人,默认用配置账户 to=recipient_list, connection=connection ) return email.send(fail_silently=fail_silently)
3. 调用工具函数发送邮件
在业务代码中直接调用该函数,它会自动根据主题选择对应邮箱发送:
# 示例:发送售后邮件 send_email_by_subject( subject='关于您的售后申请回复', message='您的售后申请已受理,将在3个工作日内处理', recipient_list=['user@example.com'] ) # 示例:发送营销邮件 send_email_by_subject( subject='新品上市限时折扣,点击查看详情', message='专属优惠链接:xxx', recipient_list=['user@example.com'] )
关键说明
- 核心逻辑是
get_connection()方法:它可以接收SMTP参数,创建指定账户的连接,完全替代全局配置的默认连接。 - 主题匹配规则可根据需求调整,比如用正则表达式匹配更复杂的主题模式。
- 如果需要发送HTML邮件,将
EmailMessage替换为EmailMultiAlternatives,添加HTML内容即可。
内容的提问来源于stack exchange,提问作者Robo
相关产品推荐
相关产品推荐

