我在Django网站上设置了优雅的论坛应用程序Spirit,但在Heroku安装上发送电子邮件时遇到了一些麻烦。毫无疑问,这是因为我是一个新手,在Django中发送电子邮件有点不稳定,并且不太确定如何获取相关的调试信息。一些帮助将非常感激。
我安装了Postmark插件和Python-Postmark库。在本地安装上,一切都非常好:在我的机器上使用安装时,注册电子邮件会按原样交付。问题仅出在部署版本上。
另外,当我输入
heroku run python
from django.config import settings
from django.core.mail import send_mail
send_mail('this is a test from the heroku server','body',settings.DEFAULT_FROM_EMAIL, ['the.robot@example.com'],fail_silently=False)
然后邮戳服务器发送消息并收到消息。所以...它似乎是Postmark安装,而Django命令send_mail至少可以在Heroku服务器上运行。只是当我要求时,例如在Heroku服务器上使用论坛应用程序本身时,通过浏览器发送用户激活消息,表明邮件未发送。
邮戳是在网站的settings.py文件中配置的。
EMAIL_BACKEND = 'postmark.django_backend.EmailBackend'
POSTMARK_API_KEY = os.environ['POSTMARK_API_KEY']
POSTMARK_SENDER = 'the.robot@example.com'
POSTMARK_TEST_MODE = False
POSTMARK_TRACK_OPENS = False
DEFAULT_FROM_EMAIL = POSTMARK_SENDER
SERVER_EMAIL = POSTMARK_SENDER
以下是应该发送电子邮件的(略微修改过的)代码。
def sender(request, subject, template_name, context, to):
site = 'example.com'
context.update({'site_name': 'example',
'domain': 'example.com',
'protocol': 'https' if request.is_secure() else 'http'})
message = render_to_string(template_name, context)
from_email = "the.robot@example.com"
if len(to) > 1:
kwargs = {'bcc': to, }
else:
kwargs = {'to': to, }
email = EmailMessage(subject, message, from_email, **kwargs)
def send_activation_email(request, user):
subject = _("User activation")
template_name = 'spirit/user/activation_email.html'
token = UserActivationTokenGenerator().generate(user)
context = {'user_id': user.pk, 'token': token}
sender(request, subject, template_name, context, [user.email, ])
我也尝试使用gmail作为邮件服务器,如this answer中所述,同样的问题再次出现。也就是说,邮件从本地安装完全发送,但显然不是由Heroku版本发送的。同样,命令send_mail仍可用于Heroku。