【问题标题】:How to override the from address in django email (sent through Gmail)如何覆盖 django 电子邮件中的发件人地址(通过 Gmail 发送)
【发布时间】:2011-12-07 16:33:57
【问题描述】:

在我的 settings.py 中,我有这个值:

EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'user@gmail.com'
EMAIL_HOST_PASSWORD = 'pass'
EMAIL_USE_TLS = True

然后在我看来,我从我的模型中获得了一个电子邮件地址,例如:

#models.py
class Profile(models.Model):
    name = models.CharField(...)
    email_address = models.EmailField()

假设Profile模型中的email_addresssample@gmail.com

#views
def send_email(request,profile_id):
   profile = Profile.objects.get(pk=profile_id)
   email = profile.email_address

所以我什么时候发邮件,

send_mail('subject', 'content', email, ['example1@example.com'])

当电子邮件已经发送时,sender_email 仍然是 user@gmail.com。有人可以教我如何覆盖此电子邮件地址吗?谢谢。

【问题讨论】:

    标签: django gmail


    【解决方案1】:

    首先你需要在你的 setting.py 中删除 EMAIL_HOST_USER 和 EMAIL_HOST_PASSWORD 并使用 auth_user 和 auth_password

    auth_user:: 如果 EMAIL_HOST_USER 没有被指定,或者你想覆盖它,这个用户名将被用来对 SMTP 服务器进行身份验证。

    auth_password:: 如果 EMAIL_HOST_PASSWORD 没有指定,这个密码将用于验证 SMTP 服务器。

    mail.send_mail(
            subject='here your subject',
            message='message',
            from_email='fromepython@gmail.com',
            recipient_list=[to_email],
            auth_user = 'fromepython@gmail.com',
            auth_password = 'password',
            fail_silently=True,
    
    )
    

    【讨论】:

      【解决方案2】:

      DEFAULT_FROM_EMAIL 设置就是这样,默认设置。 Django 在自动发送电子邮件的地方使用它(例如向ADMINS 报告错误)。直接调用send_mail方法时,必须提供from_email参数。即使您想要DEFAULT_FROM_EMAIL,也必须从django.conf.settings 导入它,然后将其传入。

      我最好的猜测是 Gmail 实际上是这里的罪魁祸首。据我所知,Gmail 不允许您指定自定义发件人,因为太多人已经尝试使用 Gmail 发送垃圾邮件,而他们希望阻止这种做法。

      基本上,当您的电子邮件通过 Gmail 外发邮件服务器时,它会忽略您发送的自定义标头并从您的实际 Gmail 帐户用户发送。您可以通过在 Gmail 的设置中添加要用作有效发件人的电子邮件自定义来解决此问题。转到设置,然后转到“帐户和导入”选项卡。找到标题为“发送邮件”的部分,然后单击“添加您拥有的另一个电子邮件地址”链接。您可以添加一个您想从那里发送的新电子邮件帐户,它会让您通过电子邮件确认地址(因此它必须是可以接收电子邮件的有效地址)。

      【讨论】:

      • uhmmmmm,克里斯,关于你所说的,你能给我举个例子吗?顺便说一句,我使用的电子邮件是有效的。 :D
      • 什么例子?这与您要发送的电子邮件地址是否有效无关;这是关于它是否在您的 Gmail 帐户中设置为允许的发件人。如果不是,Gmail 将不允许您将其用作发件人。
      【解决方案3】:

      David,您确定您的电子邮件在您的示例中出现了吗?

      来自文档:https://docs.djangoproject.com/en/dev/topics/email/ from_email:发件人的地址。 fred@example.com 和 Fred 表格都是合法的。如果省略,则使用 DEFAULT_FROM_EMAIL 设置。

      另外:https://docs.djangoproject.com/en/dev/topics/email/#django.core.mail.send_mail 您的用法看起来正确:

      from django.core.mail import send_mail
      send_mail('Subject here', 'Here is the message.', 'from@example.com',
          ['to@example.com'], fail_silently=False)
      

      过度骑行可能不是问题。您的电子邮件可能只是空白?

      希望对您有所帮助。

      【讨论】:

      • 是的。即使我使用配置文件的电子邮件,发送时 email_user 也会覆盖它。所以我想发生的是个人资料的电子邮件将是 sender_email
      • uhmmmmm,你说我的电子邮件只是空白,它不是。我输入了一个有效的电子邮件地址。
      • 是的,但此时代码中是否为空白: send_mail('subject', 'content', email, ['example1@example.com']) ?您可以将该电子邮件对象作为内容发送以查看它是否通过?
      • 假设 Profile 模型中的 email_address 是 sample@gmail.com。所以在如上所示的视图中,可以看到send_mail中的email确实是有价值的。
      猜你喜欢
      • 2011-07-21
      • 2020-08-14
      • 2016-03-10
      • 2011-03-19
      • 1970-01-01
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-07
      相关资源
      最近更新 更多