Django的send_email()在测试时不会引发BadHeaderError

2024-09-26 22:52:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为联系人电子邮件视图编写一些测试,我发现当我使用假电子邮件设置(email_HOST_USER和email_HOST_密码)时不会引发BadHeaderError。在生产中,它像预期的那样工作,当我正确配置电子邮件时成功,当我使用假电子邮件时引发异常。不管我使用什么样的电子邮件设置,测试总是成功的。在

我尝试使用DEBUG=False来运行测试,但是得到了相同的输出。我不知道是什么导致了这种行为。在

这是我正在测试的视图(我在这里对其进行了简化,剩下的代码只是关于获取POST数据并对其进行验证,正如预期的那样工作):

# home.views.py

def contact(request):
    success = False
    error = ''
    try:
        email_message = (
        "MESSAGE SENT BY: " +
        contact_email + " (" +
        contact_name + ")"
        "\n_______________________________"
        "_________________________________"
        "__\n\n\n" +
        contact_message
        )
        send_mail(
            contact_subject,
            email_message,
            settings.DEFAULT_FROM_EMAIL,
           [settings.DEFAULT_FROM_EMAIL]
        )
        success = True
    except BadHeaderError:
        error = (
            "Invalid header found."
        )
    except smtplib.SMTPException:
        error = (
             "A connection error occurred and "
             "your message has not been sent."
        )
    response = {'success': success, 'error': error}
    return HttpResponse(json.dumps(response),
                        content_type='application/json')

更新-由于@mata的评论和我自己对模拟库的研究,这些测试最终按预期工作:

^{pr2}$

Tags: from视图falsedefaulthostmessagesettings电子邮件
1条回答
网友
1楼 · 发布于 2024-09-26 22:52:15

在测试会话期间,测试运行程序sets up是一个本地内存后端(通过调用^{}),它只是将已发送的邮件附加到mail.outbox而不是真正发送它们,因此更改电子邮件用户和密码设置不会产生效果。在

另外,无效的用户和密码设置不应该生成BadHeaderError,只有在头包含换行符或回车符时才使用。在

相关问题 更多 >

    热门问题