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?Prueba de envío de correo electrónico sin servidor de correo electrónico
Respuesta
Puede configure your application to use the Console Backend para el envío de correo electrónico. Escribe los correos electrónicos a la salida estándar en lugar de enviarlos.
Cambiar la settings.py para incluir esta línea:
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
No se olvide de quitarlo para la producción.
Mejor aún, colóquelo en un archivo de configuración de desarrollo y no lo agregue a la producción. – leech
O mejor aún, [hágalo con variables de entorno] (http://12factor.net/config). – meshy
Si está utilizando ['mail_admins'] (https://docs.djangoproject.com/en/stable/topics/email/#mail-admins), recuerde configurar [' ADMINS'] (https: // docs .djangoproject.com/es/stable/ref/settings/# std: setting-ADMINS) a algo, de lo contrario, nada se imprimirá en stdout. Del mismo modo para 'mail_managers'. – Flimm
Python tiene un pequeño servidor SMTP built-in. 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.
tiene que configurar Django para utilizar este servidor en su settings.py
:
EMAIL_HOST = 'localhost'
EMAIL_PORT = 1025
Tenga en cuenta que su la aplicación puede lanzar una excepción si intenta enviar un correo electrónico cuando el servidor de correo electrónico no se inicia. 'fail_silently = False' es el valor predeterminado para' send_mail'. –
Si bien la respuesta de Daniel Hepper es indudablemente la correcta con respecto a la pregunta planteada, me gusta más esta respuesta porque es una solución general que funciona independientemente del entorno. (Por supuesto, en ambos casos, por supuesto.) – Teekin
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.
Eso es realmente increíble de saber. Gracias. – Teekin
Si sus pruebas se extienden desde django.test.testcases.TestCase, entonces no es necesario hacer nada. Django reemplazará el EmailBackend por uno "especial". A continuación, puede probar lo que había sido enviado como esto:
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 buzón de salida es un objeto especial que consiguen inyecta en el correo cuando se ejecuta la prueba manage.py pitón.
Hay una aplicación de frío para este Caktus por https://github.com/caktus/django-email-bandit Sólo añadir esto a su archivo settings.py:
EMAIL_BACKEND = 'bandit.backends.smtp.HijackSMTPBackend'
BANDIT_EMAIL = '[email protected]'
En la parte superior de su correo electrónico mensajes de correo electrónico setttings..All se desviarán a '@ your_email ejemplo .com'
feliz codificación ...
Este elabora sobre la respuesta de Benjamin. Una forma de probar los correos electrónicos si no tengo un servidor de correo local como postfix, sendmail o exim instalado es ejecutar el servidor de correo electrónico de python. Se puede ejecutar en el puerto 25 con sudo, o simplemente utilizar un puerto> 1024 (puertos reservados):
python -m smtpd -n -c DebuggingServer localhost:1025
#sudo python -m smtpd -n -c DebuggingServer localhost:25
Para las pruebas con su código de aplicación Django actual, puede cambiar temporalmente settings.py para incluir esto en el botom:
EMAIL_HOST, EMAIL_PORT, EMAIL_HOST_USER, EMAIL_HOST_PASSWORD = 'localhost', 1025, None, None
Ahora pruebe sus correos electrónicos, o puede hacerlo en ./manage.shell py en otra ventana de terminal, así:
python manage.py shell
y pegar en 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 hay necesidad de utilizar ningún correo electrónico reales desde verá todo en su terminal. Puede volcarlo en el contenedor apropiado como .html para realizar más pruebas.
- 1. Correo de Java: envío de correo electrónico sin SMTP
- 2. Envío de correo electrónico utilizando Smtp.mail.microsoftonline.com
- 3. Envío de un formulario por correo electrónico
- 4. envío de correo electrónico masivo usando PHP
- 5. Enfoques de envío de correo electrónico
- 6. Envío de transmisiones por correo electrónico
- 7. Envío de correo electrónico HTML en Django
- 8. PHP Envío de correo electrónico BCC
- 9. Escribiendo un simple servidor de correo electrónico
- 10. Envío de resultados de correo electrónico HTML Correo electrónico que muestra código HTML (Codeigniter Email Class)
- 11. El envío de un correo electrónico El uso Commons-correo electrónico a Gmail
- 12. Django correo electrónico
- 13. Leer el correo electrónico del servidor de correo entrante (POP)
- 14. Integración de correo electrónico
- 15. correo electrónico validación de campo de correo
- 16. Validación de correo electrónico TSQL (sin regex)
- 17. Correo electrónico de envío de ASP clásico con autenticación SMTP
- 18. Es posible enviar un correo electrónico mediante programación sin utilizar ninguna cuenta de correo electrónico real
- 19. Procesando correo electrónico entrante
- 20. ¿Rieles un envío de correo electrónico de línea?
- 21. Archivos adjuntos de correo electrónico
- 22. envío de correo electrónico a través de Gmail en .NET
- 23. Envío de correo sin instalar un servidor SMTP
- 24. ¿Cómo probar el correo electrónico de prueba unitaria?
- 25. envío de correo electrónico después de raspadura en scrapy
- 26. Envío de contenido de correo electrónico en HTML
- 27. ¿Enviar correo electrónico de Elmah?
- 28. cómo confirmar la fuente de correo electrónico
- 29. Envío de correo electrónico con el archivo adjunto
- 30. Enviando correo electrónico masivo solicitado
Puede ser útil saber el sistema operativo de su caja local ... En realidad, no necesita un servidor de correo electrónico en la caja, todo lo que necesita es una conexión de red a un servidor de correo electrónico a través del puerto SMTP ... y posible usuario/contraseña. – Spacedman
posible duplicado de [Servidor Dummy SMTP para probar aplicaciones que envían correo electrónico] (http://stackoverflow.com/questions/1006650/dummy-smtp-server-for-testing-apps-that-send-email) –