如何使用Django从用户的电子邮件地址发送电子邮件?

时间:2013-11-29 22:08:51

标签: django django-email

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

我尝试将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>')}

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

2 个答案:

答案 0 :(得分:3)

简短回答:你做不到。

在过去,邮件服务器曾经非常轻松地发布邮件,只要有人要求他们发送邮件,但随后垃圾邮件发生了,人们意识到检查发送电子邮件的人实际上就是这个人真的很重要其地址显示在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错误消息的原因。

  4. 相反,您最好的选择 - 实际上是选项 - 是将您自己的电子邮件地址放在From:标题中,并从您自己的邮件服务器发送电子邮件。如果您希望将回复转发给其他人,请添加包含其电子邮件地址的Reply-To:标题。

答案 1 :(得分:0)

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

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