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

如何解决Django中发件人与收件人邮箱相同的问题?

问题排查与解决:邮件发件人显示为自身邮箱而非用户邮箱

问题原因

Gmail的SMTP服务器有严格的反垃圾邮件规则,它会强制替换你在send_mail里指定的from_email为你配置的EMAIL_HOST_USER,不允许随意伪造发件人地址,这就是你收到的邮件发件人是自己邮箱的核心原因。

解决方案

方案1:添加回复地址+在邮件内容中标注用户信息(推荐,适配Gmail规则)

无需修改SMTP配置,仅调整send_mail的调用逻辑即可解决识别问题:

  • 将用户邮箱设置为回复地址,点击邮件回复时直接发送到用户邮箱
  • 在邮件内容里嵌入用户的姓名和邮箱,方便你直接识别发件人身份

修改后的views.py代码:

def ContactME(request):
    if request.method == "POST":
        MessageSenderName = request.POST.get('name')
        SenderMessage = request.POST.get('message')
        SenderEmail = request.POST.get('email')
        Contact.objects.create(
            Name=MessageSenderName,
            Email=SenderEmail,
            Message=SenderMessage,
        )

        # 构造带用户身份信息的邮件内容
        email_content = f"发件人姓名:{MessageSenderName}\n发件人邮箱:{SenderEmail}\n\n留言内容:\n{SenderMessage}"
        
        send_mail(
            '(Portfolio)' + MessageSenderName,
            email_content,
            # 此处必须使用你的Gmail邮箱(Gmail强制要求发件人匹配配置的邮箱)
            'xxxxxx@gmail.com',
            ['XXXX@gmail.com'],
            # 添加回复地址,指向用户提交的邮箱
            reply_to=[SenderEmail]
        )

    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))

方案2:更换支持自定义发件人的SMTP服务商

如果一定要让邮件显示用户邮箱为发件人,Gmail无法满足该需求,你需要更换到支持自定义发件人的邮件服务(如SendGrid、Mailgun、阿里云邮件推送等)。这类服务商允许你配置域名后自定义发件人地址,但需要完成额外的域名验证和服务配置步骤。

额外检查项

  • 确认SenderEmail能正确获取用户提交的邮箱地址,可在创建Contact对象后添加打印日志验证
  • 若你的Gmail开启了两步验证,EMAIL_HOST_PASSWORD必须使用应用专用密码而非原账号密码

内容的提问来源于stack exchange,提问作者Mossaddak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 18:54:21