【问题标题】:How do I send email from a user's email address with Django?如何使用 Django 从用户的电子邮件地址发送电子邮件?
【发布时间】:2013-12-16 03:15:36
【问题描述】:

我想代表用户向第三方发送电子邮件。关键是让用户的电子邮件显示为“发件人:”电子邮件。

我尝试将send_mail 与用户的电子邮件作为from_email 一起使用,但无济于事。当我使用 gmail 的服务器发送邮件时,第三方将EMAIL_HOST_USER 视为“发件人:”电子邮件。当我尝试使用 namecheap 的邮件服务器时,我得到了SMTPRecipientsRefused: {u'<to email>': (553, '5.7.1 <from email>: Sender address rejected: not owned by user <EMAIL_HOST_USER>')}

如果可能,我也想避免询问他们的密码。

【问题讨论】:

  • 您确实意识到不鼓励伪造from: 地址?当邮件服务器帐户是您的时,您会希望您只能使用 from: 发送电子邮件。
  • 我不想伪造from: 地址,我只想代表用户发送电子邮件。它可以说“通过 mysite.com”或类似的内容。
  • 嗯,是的,但是正确配置的电子邮件服务器不允许您这样做。否则我可以以其他人的身份发送电子邮件,这不是一件好事。 SMTP 协议允许这样做,但这不是我们想要的。如果您有用户密码,您可以代表他们授权电子邮件。

标签: django django-email


【解决方案1】:

如果您使用的是 Exchange,则可以使用 Exchangelib 之类的库,其中作者似乎受到了 Django 的一些设计决策的启发。不幸的是,看起来您仍然需要询问用户密码。稍后我将进一步研究这个问题,由于我对 Django 项目使用 LDAP 身份验证,也许有一些方法可以使用它来对电子邮件服务器进行身份验证,但我对此持怀疑态度。

看到这个问题: https://serverfault.com/questions/546255/sending-email-with-python-django-through-microsoft-exchange-imap

【讨论】:

    【解决方案2】:

    简短回答:你不能那样做。

    在过去,邮件服务器在任何人要求时都可以很轻松地发布邮件,但随后垃圾邮件发生了,人们意识到检查发送电子邮件的人是否真的是非常重要的人其地址出现在From: 标头中。

    现在有几种机制可以使伪造发件人电子邮件地址变得非常困难。其中包括:

    1. Sender Policy Framework (SPF):一种电子邮件验证系统,通过对授权从特定电子邮件地址发送电子邮件的 IP 地址进行限制来工作。如果您尝试从与电子邮件地址的合法所有者无关的 IP 地址发送电子邮件,您的邮件将被拒绝。

    2. DomainKeys Identified Mail (DKIM):一种确认电子邮件声称来自特定邮件服务器确实来自该服务器的方法。

    3. Mail transfer agent 限制:如今,大多数 MTA 都被配置为只接受它已经认识的人的电子邮件。 (这就是您看到Sender address rejected: not owned by user 错误消息的原因)。

    相反,您最好的选择(基本上是您的only 选择)是将您自己的电子邮件地址放在From: 标头中,然后从您自己的邮件服务器发送电子邮件。如果您希望将回复发送给其他人,请添加包含其电子邮件地址的 Reply-To: 标头。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-22
      • 2014-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多