如何在 django 中使用 gmail smtp 更改回复和返回路径标头

Posted

技术标签:

【中文标题】如何在 django 中使用 gmail smtp 更改回复和返回路径标头【英文标题】:How to change reply-to and return-path header with gmail smtp in django 【发布时间】:2013-07-21 07:29:00 【问题描述】:

我在我的 django 网站中使用 gmail smtp。我有一个联系表格,用户在其中输入电子邮件和消息,然后我向管理员发送邮件:

   email = EmailMessage('email subject', 'email message', settings.EMAIL_HOST_USER,
                        ['admin.mysite@gmail.com'],
                          headers = 'Reply-To': 'user@foo.bar',
                               'Sender': 'user@foo.bar','from': 'user@foo.bar','Return-Path': 'user@foo.bar')
   email.send(fail_silently=False)

电子邮件已正确发送/接收,但当管理员客户端在 gmail 中选择回复时,它始终回复 settings.EMAIL_HOST_USER 而不是用户地址。在电子邮件原始标题上,From 和 Return-path 设置为 setting.EMAIL_HOST_USER

【问题讨论】:

你是说你是通过 gmail 的 smtp 服务器 smtp.gmail.com 发送消息吗?而且,当收件人收到邮件时,发件人的地址(以及对地址的回复)显示为与您用来发送邮件的 gmail 帐户关联的 gmail 地址,而不是您在其中指定的发件人地址你的代码? 是的,标头的某些部分被 smtp.gmail.com 忽略。我想它一定是一个安全功能。我目前希望在我的服务器上使用 exim4 而不是 gmail > 由于 Gmail 的限制,我有同样的问题一年了。 > > 但是今天我重试并成功了,谷歌似乎改变了它的政策。 python # settings.py .... DEFAULT_FROM_EMAIL = 'Infoma Admin<no-reply@infoma.co.nz>' ![enter image description here](i.stack.imgur.com/xA5Zz.png) Django 2.1.7 【参考方案1】:

如果您使用 smtp.gmail.com 发送邮件,并且发件人的电子邮件地址不是 yourgoogleemailname@gmail.com,那么 Gmail 将重写标头并将发件人地址设置为 yourgoogleemailname@gmail.com。有关更多信息和可能的解决方案,请参阅 http://lifehacker.com/111166/how-to-use-gmail-as-your-smtp-server。

【讨论】:

感谢您的回复,但就我而言,我想动态修改 from 或 reply-to,因为每个用户都将通过相同的联系表单发送电子邮件,并在他们的电子邮件中提供一个输入字段。跨度> 没关系。但是,如上所述,如果您通过 smtp.gmail.com 发送邮件,那么 gmail 将重写标题,将发件人地址(和回复地址)替换为 yourgoogleemailname@gmail.com。如果这对您来说是一个阻碍,那么您可能希望通过不同的传出 SMTP 服务器发送这些信息,例如 SendGrid 或 UltraSMTP.com。 其实我找到了解决方法,这实际上是一个错误,我正在发送带有 settings.EMAIL_HOST_USER 的电子邮件,这是一个与 admin.mysite@gmail.com 链接的 gmail 帐户。我只是创建了另一个 gmail 帐户(未链接),现在回复工作正常。主要是我用 exim 安装了我自己的 SMTP 服务器,并了解到这个错误与发送电子邮件地址有关。【参考方案2】:

Google 违反了定义 SMTP 服务器预期操作的 RFP,重写了标头。这可能是您问题的根本原因:http://lee-phillips.org/gmailRewriting/

【讨论】:

不仅仅是谷歌...Amazon.de 和许多其他网站对 SPF/DMARC 对齐中的 smtp 5321 地址并不严格...这是相当普遍且安全的。 support.plesk.com/hc/en-us/articles/… 不管 GSuite/Workspace 没有设置来修复它。因此,您有 3 个选项,更改主地址或添加单独的 SMTP 登录。

以上是关于如何在 django 中使用 gmail smtp 更改回复和返回路径标头的主要内容,如果未能解决你的问题,请参考以下文章

在 django 中发送邮件 - gmail smtp 问题

无法将 Django 设置为与 smtp.gmail.com 一起使用

使用SMTP和Gmail在Django上发送电子邮件

Python Django Gmail SMTP 设置

Django 通过 smtp.gmail.com 发送电子邮件的问题

带有 smtp.gmail SMTPAuthenticationError 534 的 Django 电子邮件需要特定于应用程序的密码