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

dav*_*vid 7 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
Run Code Online (Sandbox Code Playgroud)

然后在我的观点中,我从我的模型中获取了一个电子邮件地址,例如:

#models.py
class Profile(models.Model):
    name = models.CharField(...)
    email_address = models.EmailField()
Run Code Online (Sandbox Code Playgroud)

让我们假设email_addressProfile模型sample@gmail.com

#views
def send_email(request,profile_id):
   profile = Profile.objects.get(pk=profile_id)
   email = profile.email_address
Run Code Online (Sandbox Code Playgroud)

所以当我发送邮件时,

send_mail('subject', 'content', email, ['example1@example.com'])
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*att 9

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

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

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


小智 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)
Run Code Online (Sandbox Code Playgroud)

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

希望有帮助。