django - enviar - Prueba de envío de correo electrónico sin servidor de correo electrónico
servidor de correo windows server 2012 (6)
Tengo una aplicación de Django que envía un correo electrónico. El servidor de producción tiene un servidor de correo electrónico pero mi caja local no. Me gustaría poder probar el envío de correos electrónicos localmente. ¿Hay alguna forma de que pueda hacer que django no lo envíe a través del servidor de correo electrónico y simplemente imprimir en un archivo o consola?
Esto explica la respuesta de Benjamin. Una forma de comprobar los correos electrónicos si no tengo instalado un servidor de correo local como postfix, sendmail o exim es ejecutar el servidor de correo electrónico python. Puede ejecutarlo en el puerto 25 con sudo, o simplemente usar un puerto> 1024 (puertos reservados):
python -m smtpd -n -c DebuggingServer localhost:1025
#sudo python -m smtpd -n -c DebuggingServer localhost:25
Para probar con su código actual de la aplicación django, puede cambiar settings.py temporalmente para incluir esto en el botom:
EMAIL_HOST, EMAIL_PORT, EMAIL_HOST_USER, EMAIL_HOST_PASSWORD = ''localhost'', 1025, None, None
Ahora prueba tus correos electrónicos, o puedes hacer esto en el shell ./manage.py en otra ventana de terminal así:
python manage.py shell
Y pegue este código para enviar un correo electrónico:
from django.core.mail import send_mail
send_mail(''Subject here'', ''Here is the message.'', ''[email protected]'',[''[email protected]''], fail_silently=False)
No necesita usar ningún correo electrónico real ya que verá todo en su terminal. Puede volcarlo en el contenedor apropiado como .html para realizar más pruebas.
Hay una aplicación genial para esto por caktus https://github.com/caktus/django-email-bandit Simplemente agregue esto a su archivo settings.py:
EMAIL_BACKEND = ''bandit.backends.smtp.HijackSMTPBackend''
BANDIT_EMAIL = ''[email protected]''
Además de las configuraciones de su correo electrónico, todos los correos serán desviados a ''[email protected]''
Feliz codificación ...
Puede configurar su aplicación para utilizar el Backend de la consola para enviar correos electrónicos. Escribe los correos electrónicos a la salida estándar en lugar de enviarlos.
Cambie su settings.py para incluir esta línea:
EMAIL_BACKEND = ''django.core.mail.backends.console.EmailBackend''
No te olvides de eliminarlo para la producción.
Puede configurar su aplicación para escribir correos electrónicos en archivos temporales en lugar de enviarlos (similar a la respuesta de Daniel Hepper).
EMAIL_BACKEND = ''django.core.mail.backends.filebased.EmailBackend''
EMAIL_FILE_PATH = ''tmp/email-messages/''
Esto guarda cada nuevo mensaje como un archivo separado. Útil si está enviando montones de correos electrónicos, y no quiere tener que usar la función scrollback.
Python tiene un pequeño servidor SMTP incorporado . Puede iniciarlo en una segunda consola con este comando:
python -m smtpd -n -c DebuggingServer localhost:1025
Esto simplemente imprimirá todos los correos enviados a localhost:1025
en la consola.
Debe configurar Django para usar este servidor en su settings.py
:
EMAIL_HOST = ''localhost''
EMAIL_PORT = 1025
Si sus pruebas se extienden desde django.test.testcases.TestCase, entonces no es necesario hacer nada. Django reemplazará el EmailBackend por uno "especial". Entonces puedes probar lo que se hubiera enviado así:
def testMethodThatSendAEmail(self):
...
from django.core import mail
object.method_that_send_email(to=''[email protected]'')
self.assertEqual(len(mail.outbox), 1)
self.assertEqual(mail.outbox[0].to, [''[email protected]''])
...#etc
El objeto de la bandeja de salida es un objeto especial que se inyecta en el correo cuando se ejecuta la prueba python manage.py.