如何更改Django邮件的发件人地址?
正如文档中提到的,SERVER_EMAIL
这个设置应该能改变Django(1.3.1)服务器发送给ADMINS
的崩溃邮件中的“发件人”地址。
但实际上并没有改变。
在1.3.1版本中,这个功能对你有效吗?(或者其他任何Django版本)
Django坚持只用我的EMAIL_HOST_USER
,也就是我的邮箱登录名/实际地址,作为发件人地址。我使用的是Gmail作为SMTP服务器,所以我在想这是否有关系。Gmail会阻止这种操作吗?我发誓之前是能成功的。
这有点让人烦,因为我们有多个项目似乎都在用同一个地址发邮件,我们得翻看错误追踪信息才能知道是哪个项目发的。
2 个回答
1
从我看到的代码(1.3.1)来看,堆栈跟踪的邮件是通过 mail_admins 方法发送的,发件人地址是 SERVER_EMAIL:
mail = EmailMultiAlternatives(u'%s%s' % (settings.EMAIL_SUBJECT_PREFIX, subject),
message, settings.SERVER_EMAIL, [a[1] for a in settings.ADMINS],
connection=connection)
这个地址是这样定义的:
class EmailMultiAlternatives(EmailMessage):
[...]
def __init__(self, subject='', body='', from_email=None, to=None, bcc=None,
connection=None, attachments=None, headers=None, alternatives=None,
cc=None):
我建议把跟踪输出放在 EmailMultiAlternatives 中,这样可以确认使用的是正确的邮箱地址。
3
问题出在Gmail上。从smtplib
这个库开始,正确的发件人地址已经设置好,这个库也会把正确的地址发送给Gmail。
这个Gmail支持页面暗示(特别是在页面底部的“POP/IMAP用户注意”部分)你需要在Gmail的设置中将一个地址添加为“附加邮箱地址”,才能通过Gmail的SMTP服务器从这个地址发送邮件。
当然,这需要验证;因为我的发件人地址没有收件箱(它是假的!),所以我现在无法做到。不过至少这不是Django的错误!: )
(注意:这显然是Gmail为了防止你发送垃圾邮件而采取的措施,我相信这就是他们这么做的原因。)