【问题标题】:How can I know if a email is sent correctly with Django/Python?我如何知道使用 Django/Python 是否正确发送了电子邮件?
【发布时间】:2011-07-19 11:46:20
【问题描述】:

我需要知道是否正确发送了一封电子邮件以执行多项操作,但该函数始终返回 True。

有什么想法吗?

谢谢。

【问题讨论】:

  • 你写过代码吗?如果有请分享。这样我们就可以从那里帮助您。

标签: python django


【解决方案1】:

如果出现错误,send_mail 应该引发异常。 fail_silently 参数可以忽略错误。您是否误启用了此选项?

希望对你有帮助

【讨论】:

  • 此异常表明邮件是否写得好。即:try@com 返回一个引发异常,但 fsaaadadsadfsafds@try.com 没有,尽管此邮件不存在。
【解决方案2】:

无法检查是否确实收到了邮件。这不是因为 Django 失败,而是电子邮件工作方式的结果。

如果您需要某种形式的明确送达确认,则需要使用电子邮件以外的其他方式。

【讨论】:

  • 2019 年有什么变化吗?还是没有办法检查?
【解决方案3】:

This post 在将 Django 与 Postmark 集成时描述了如何跟进电子邮件传递。

【讨论】:

  • 不鼓励链接到外部答案,因为外部站点可能会更改,从而使答案不可用或不相关。链接到商业服务而不澄清这是更大的伤害。
【解决方案4】:

在运行单元测试时,电子邮件将作为EmailMessage 对象存储在django.core.mail.outbox 的列表中,然后您可以在测试类中执行您想要的任何检查。以下是来自django's docs 的示例。

from django.core import mail
from django.test import TestCase

class EmailTest(TestCase):
    def test_send_email(self):
        # Send message.
        mail.send_mail('Subject here', 'Here is the message.',
            'from@example.com', ['to@example.com'],
            fail_silently=False)

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

        # Verify that the subject of the first message is correct.
        self.assertEqual(mail.outbox[0].subject, 'Subject here')

或者,如果您只是想在开发过程中直观地检查电子邮件的内容,您可以将EMAIL_BACKEND 设置为:

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

然后看看你的控制台。

或

EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend'
EMAIL_FILE_PATH = '/tmp/app-messages' # change this to a proper location

然后检查文件。

【讨论】:

  • 我找不到 tmp/app-messages 或任何创建的内容。我应该在哪里找到那个文件夹?你的意思是什么控制台?当我使用控制台后端时,在我的终端中没有打印...
猜你喜欢
  • 2016-06-24
  • 1970-01-01
  • 2013-06-03
  • 2021-03-13
  • 1970-01-01
  • 2017-03-26
  • 2015-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多