gpt4 book ai didi

python - Django 不在 TestCase 上发送电子邮件,但它在 Shell 上发送

转载 作者:太空宇宙 更新时间:2023-11-03 14:44:31 25 4
gpt4 key购买 nike

我有一个奇怪的问题。每当我尝试从 TestCase 发送电子邮件时,我都收不到它。但是,我在 Django shell 上尝试了相同的方法,它成功地发送了电子邮件。这是我的测试用例:

class DefaultEmailTestCase(TestCase):
def test_send(self):
msg = EmailMessage(
"Test Message",
"This is a test message.",
to=["foo@bar.com", "foo@baz.com"]
)
val = msg.send()
self.assertEqual(val, 1)

它成功完成,但我没有收到电子邮件。这是我在 Django 的 shell 上所做的:

from django.core.mail import EmailMessage

receivers = ["foo@bar.com", "foo@baz.com"]

msg = EmailMessage(
"Test Message",
"This is a test message."
to=receivers
)

msg.send()

我成功收到了消息。

这是我的设置顺序(带有虚拟信息):

EMAIL_BACKEND = 'django.core.mail.backends.locmem.EmailBackend'
EMAIL_HOST = "foo.bar.com"
EMAIL_PORT = 465 # This is the port that my email provider uses.
EMAIL_HOST_USER = "foo@bar.com"
EMAIL_HOST_PASSWORD = "123456"
# EMAIL_USE_TLS = True # Django raised an error saying that I cannot use both TLS and SSL. So I commented it out.
EMAIL_USE_SSL = True
DEFAULT_FROM_EMAIL = "Bar Testing Message <foo@bar.com>"

我还使用 django.core.mail.backends.smtp.EmailBackend 作为 EMAIL_BACKEND 但没有成功。

测试用例和Django shell都使用了我的开发设置,所以它们是一样的。我不知道为什么这不起作用。

提前致谢。


环境

  • python 3.6.5
  • Django 2.0.4

最佳答案

这是来自 Django documentation :

The 'locmem' backend stores messages in a special attribute of the django.core.mail module. The outbox attribute is created when the first message is sent. It’s a list with an EmailMessage instance for each message that would be sent.

基本上,当 Django 设置测试环境时,它会将电子邮件后端更改为内存中的一个(您在案例中指定的那个)。因此,即使指定了 django.core.mail.backends.smtp.EmailBackend,它也会被 Django 覆盖。

如果您需要覆盖该行为,这里有一个解决方案:

from django.test.utils import override_settings

@override_settings(EMAIL_BACKEND='django.core.mail.backends.smtp.EmailBackend')
class DefaultEmailTestCase(TestCase):
...

注意

设置此 Django 行为是为了避免在运行测试时可能发送数百封电子邮件,因此请牢记这一点。

如果您想查看首选实现,请查看 this .

长话短说

from django.core import mail

# Test that one message has been sent.
self.assertEqual(len(mail.outbox), 1)

因此,这将测试是否发送了电子邮件

关于python - Django 不在 TestCase 上发送电子邮件,但它在 Shell 上发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50822826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com