【问题标题】:Django Email backend (keeps sending email from incorrect "sender")Django 电子邮件后端(不断从不正确的“发件人”发送电子邮件)
【发布时间】:2011-08-21 22:11:57
【问题描述】:

我的项目中有几个实例,我尝试在 Django 视图中发送电子邮件。

我希望能够在视图中对电子邮件发件人进行硬编码。但是,当我尝试这样做时,它会继续从我的设置文件中指定的默认帐户发送电子邮件。

这是一个例子:

        if testform.is_valid():
            beta=testform.save()
            subject="Hi Beta Tester"  
            sender="correct@email.com"

            recipient=[testform.cleaned_data['email']]

            text=loader.get_template('registration/beta_email.txt')
            html=loader.get_template('registration/beta_email.html')

            site_name='mysite'
            d=Context({'site_name':site_name})
            text_content=text.render(d)
            html_content=html.render(d)
                #This sends two mail versions, plain text and html
            msg=EmailMultiAlternatives(subject, text_content, sender, recipient)
            msg.attach_alternative(html_content, "text/html")
            msg.send()

            return HttpResponseRedirect('/splash/')

我认为我可以在此处显式发送指定发件人参数。然而,当我测试它时,电子邮件是从我的设置文件中列出的地址发送的,配置如下:

       EMAIL_USE_TLS=True

       EMAIL_HOST='smtp.gmail.com'

       EMAIL_HOST_USER='wrong@email.com'

       EMAIL_HOST_PASSWORD='private'

       DEFAULT_FROM_EMAIL='wrong@email.com'

我是否只需要删除 DEFAULT_FROM_EMAIL 常量才能使其工作?我试过这样做,它似乎正在工作,但我很困惑。在 Django 文档中,它建议在视图中设置发件人应该覆盖默认值。

【问题讨论】:

  • 看来应该可以了。什么版本的 Django?查看主干版本的来源:code.djangoproject.com/browser/django/trunk/django/core/mail/…。当您将sender 传递给EmailMultiAlternatives 时,您确定它不是None 吗?我会在交互式 shell 和 pdb 中解决这个问题。
  • 嗨,Brian,我使用的是 v1.2。如果您查看下面的评论,我认为我的问题正在变得清晰
  • 你确定不是smtp服务器重写了发件人地址吗?即:gmail 做一些垃圾邮件保护。
  • 嗨,John,我是 smtp 服务器的新手,所以我不知道如何调试它。这是纯粹的开发环境,所以我的邮件没有被标记为垃圾邮件。不确定这是否重要
  • 我知道 addThis(社交媒体共享网络服务)能够从任何 gmail 帐户向任何其他 gmail 帐户发送电子邮件

标签: django email


【解决方案1】:

对于发件人的电子邮件,请尝试将其放在 中,您可以添加一个名称:

sender = "Formal Name <correct@email.com>"

这正是我在我的电子邮件发送视图中使用的语法并且它有效。

添加名称确实不应该改变它的发送方式,但它可能值得一试,也许你想要一个易于阅读的名称。

【讨论】:

  • 我刚刚测试了这个 j,我认为这是解决方案。让我再测试一下。
  • 好吧,这里发生了一些有趣的事情。我的电子邮件都默认来自 EMAIL_HOST_USER 常量。该常量的真正价值是一个谷歌应用程序帐户(基本上是 help@mysite.com)。当我尝试从 brendan@gmail.com 发送邮件时,它只是恢复为 EMAIL_HOST_USER 值。但是,当我在 google 应用程序帐户(即 support@mysite.com)中从另一个用户发送内容时,它使用的是支持而不是帮助。真有趣,我不知道该怎么办。
  • 实际上,当我想从我的谷歌应用程序帐户向我的用户发送消息时,这很好。但是当我想让一个用户通过他们各自的电子邮件帐户向另一个用户发送消息时,这是一个问题
  • @Brendan 这很有趣...所以您正试图将消息从用户发送给用户?您是托管他们的电子邮件帐户还是他们都是 gmail 帐户?
  • 嘿 J,我正在尝试从一个用户到另一个用户发送消息。他们都是gmail帐户。我的印象是这是可能的……正如我上面提到的那样,addThis 就是这样做的。任何人都可以欺骗 from 字段,对吧?
【解决方案2】:

我终于在这里找到了问题所在。不幸的是,gmail 重写了 from 和 the 经过身份验证的 smtp 上的信封。

如果您想解决这个问题,您必须使用第三方邮件服务器(它的行为不像这样的麻烦),然后将邮件发送给 gmail 用户。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 2012-03-10
    • 2011-09-16
    • 2012-05-20
    • 2013-07-20
    • 1970-01-01
    相关资源
    最近更新 更多