Saltar al contenido

Prueba de envío de correo electrónico en Django

Tatiana, miembro de nuestro staff, nos hizo el favor de crear esta sección ya que conoce perfectamente dicho tema.

Solución:

El marco de prueba de Django tiene algunos ayudantes incorporados para ayudarlo a probar el servicio de correo electrónico.

Ejemplo de documentos (versión corta):

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

class EmailTest(TestCase):
    def test_send_email(self):
        mail.send_mail('Subject here', 'Here is the message.',
            '[email protected]', ['[email protected]'],
            fail_silently=False)
        self.assertEqual(len(mail.outbox), 1)
        self.assertEqual(mail.outbox[0].subject, 'Subject here')

Puede usar un servidor de archivos para enviar correos electrónicos, lo cual es una solución muy útil para el desarrollo y las pruebas; ¡los correos electrónicos no se envían sino que se almacenan en una carpeta que puede especificar!

Si está interesado en realizar pruebas unitarias, la mejor solución es utilizar el backend en memoria proporcionado por django.

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

Tomemos el caso de usarlo como un py.prueba accesorio

@pytest.fixture(autouse=True)
def email_backend_setup(self, settings):
    settings.EMAIL_BACKEND = 'django.core.mail.backends.locmem.EmailBackend'  

En cada prueba, el mail.outbox se reinicia con el servidor, por lo que no hay efectos secundarios entre las pruebas.

from django.core import mail

def test_send(self):
    mail.send_mail('subject', 'body.', '[email protected]', ['[email protected]'])
    assert len(mail.outbox) == 1

def test_send_again(self):
    mail.send_mail('subject', 'body.', '[email protected]', ['[email protected]'])
    assert len(mail.outbox) == 1

Comentarios y calificaciones del tutorial

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *