django电子邮件无法发送生产,适用于错误,失败的特定视图

时间:2018-03-27 20:37:43

标签: django

我试图自动发送一封带有django联系我们表格的电子邮件。

  • 联系表单视图可通过django.core.mail.backends.console.EmailBackend
  • 正常开发
  • 向管理员发送电子邮件以便在procution中发现错误。

但是,为联系人视图/表单发送电子邮件并不适用于生产。

  • 提交联系表单时,生产过程中不会产生任何错误。
  • 帖子请求出现在日志中,但除此之外没有任何其他有用信息(我可以看到)。

我不确定如何最好地查明错误?

视图:

@require_http_methods(['GET', 'HEAD', 'POST'])
def contact_view(request):
    form = ContactForm()
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            contact_name = form.cleaned_data.get('contact_name', '')
            contact_email = form.cleaned_data.get('contact_email', '')
            email_content = form.cleaned_data.get('message', '')

            email = EmailMessage(
                subject="New contact form submission",
                body=email_content,
                to=('support@somedomain.com',),
                from_email=f'{contact_name} <{contact_email}>',
                reply_to=(contact_email,),
            )
            email.send()
            messages.success(request,
                             "Your email has been sent. Thanks for contacting us, we'll get back to you shortly")
            return redirect('contact')
    context = {'form': form}
    return render(request, 'pages/contact.html', context)

生产电子邮件设置:

DEFAULT_FROM_EMAIL = env('DJANGO_DEFAULT_FROM_EMAIL',
                         default=' <noreply@some_domain.com>')
EMAIL_SUBJECT_PREFIX = env('DJANGO_EMAIL_SUBJECT_PREFIX', default='[some_domain]')
SERVER_EMAIL = env('DJANGO_SERVER_EMAIL', default=DEFAULT_FROM_EMAIL)

# Anymail with Mailgun
INSTALLED_APPS += ("anymail", )
ANYMAIL = {
    "MAILGUN_API_KEY": env('DJANGO_MAILGUN_API_KEY'),
    "MAILGUN_SENDER_DOMAIN": env('MAILGUN_SENDER_DOMAIN')
}
EMAIL_BACKEND = "anymail.backends.mailgun.EmailBackend"

1 个答案:

答案 0 :(得分:2)

您的管理员电子邮件有效,因为他们使用的是DEFAULT_FROM_EMAIL

您的电子邮件提供商可能不允许您从联系表单上输入的地址发送电子邮件。

您应该使用from_email的电子邮件地址,并使用表单中的电子邮件地址作为reply_to电子邮件地址。