简体   繁体   中英

How can I know if a email is sent correctly with Django/Python?

I need know that if a email is sent correctly for to do several operations but the function always return True.

Any idea?

Thanks you.

There is no way to check that a mail has actually been received. This is not because of a failing in Django, but a consequence of the way email works.

If you need some form of definite delivery confirmation, you need to use something other than email.

When running unit tests emails are stored as EmailMessage objects in a list at django.core.mail.outbox you can then perform any checks you want in your test class. Below is an example from 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')

Alternatively if you just want to visually check the contents of the email during development you can set the EMAIL_BACKEND to:

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

and then look at you console.

or

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

then check the file.

这篇有关将Django与Postmark集成的文章描述了如何继续进行电子邮件传递。

In case of error, send_mail should raise an exception. The fail_silently argument makes possible to ignore the error. Did you enable this option by mistake?

I hope it helps

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM