如何覆盖django电子邮件中的发件人地址(通过Gmail发送)

时间:2011-12-07 16:33:58

标签: django gmail

在我的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()

我们假设email_address模型中的Profilesample@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。有人可以教我如何覆盖这个电子邮件地址吗?感谢。

2 个答案:

答案 0 :(得分:9)

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

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

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

答案 1 :(得分:0)

大卫,你确定你的电子邮件在你的例子中出现了吗?

来自文档: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)

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

希望有所帮助。