You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 11:40:25