Django + Heroku + Mandrill mail_admins() 无法正常工作,无论是手动还是由 500 错误触发
Posted
技术标签:
【中文标题】Django + Heroku + Mandrill mail_admins() 无法正常工作,无论是手动还是由 500 错误触发【英文标题】:Django + Heroku + Mandrill mail_admins() not working, either manually or as triggered by 500 error 【发布时间】:2013-06-09 06:01:29 【问题描述】:我在 Heroku 上有一个使用 Mandrill 进行 SMTP 的 Django (v1.4) 站点。我的设置文件中有所有必需的值:
EMAIL_HOST_PASSWORD EMAIL_HOST_USER EMAIL_HOST EMAIL_PORT SERVER_EMAIL(设置为真实地址,而不是 root@localhost)我可以从客户端手动使用send_messages()
发送常规电子邮件。但是当出现 500 错误时不会发送电子邮件,并且在客户端中调用 mail_admins
不会产生任何错误但也不会发送电子邮件。
这是我的日志设置:
LOGGING =
'version': 1,
'disable_existing_loggers': False,
'handlers':
'mail_admins':
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler'
,
'loggers':
'django.request':
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
,
还有我的管理员:
ADMINS = (
('My Name', 'myaddress@gmail.com'),
)
我检查了我的垃圾邮件文件夹,里面什么也没有。我在设置中遗漏了什么吗?还是别的什么?
【问题讨论】:
错误日志说明了什么? 【参考方案1】:您检查过您的 Mandrill API 日志吗?
我遇到了同样的问题,并注意到电子邮件正在发送到 Mandrill API(因为我在 settings.py 中为 Mandrill 设置了我的 smtp 设置),但 API 调用中的 from_email 和 from_name 为空。
所以,我找到了https://github.com/brack3t/Djrill 并准备安装它。我会告诉你它是否“正常工作”。
编辑:所以在安装 djrill 并遵循文档之后,我收到错误消息的 API 调用失败 - from_email 出于某种原因显示为“root@localhost”。
当我进行 github 页面上显示的 shell 测试(使用来自我的 Mandrill 帐户的接受域的电子邮件替换 Djrill Sender)时,它可以工作:
from django.core.mail import send_mail
send_mail("It works!", "This will get sent through Mandrill",
"Djrill Sender <djrill@example.com>", ["to@example.com"])
事实证明,我的默认“发件人”电子邮件设置名称混淆了。它称为 SERVER_EMAIL。见https://docs.djangoproject.com/en/1.3/ref/settings/#std:setting-SERVER_EMAIL。
因此 settings.py 中的以下内容解决了我的问题:
SERVER_EMAIL = myname@myMandrillApprovedDomain.com
【讨论】:
是的,缺少 SERVER_MAIL 设置肯定是问题所在。以上是关于Django + Heroku + Mandrill mail_admins() 无法正常工作,无论是手动还是由 500 错误触发的主要内容,如果未能解决你的问题,请参考以下文章
Django 'pip install django-heroku'(psycopg2) 错误阻止部署到 Heroku