De acuerdo con la documentation, si DEBUG
se establece en False
y algo que se proporciona con la configuración de ADMINS
, Django enviará un correo electrónico cada vez que el código plantea un código de estado 500. Tengo la configuración de correo electrónico completada correctamente (ya que puedo usar send_mail bien) pero siempre que intencionalmente coloco un código erróneo recibo mi plantilla 500.html pero no se envía ningún correo electrónico de error. ¿Qué podría hacer que Django no hiciera esto?Django no enviar mensajes de correo electrónico a los administradores
Respuesta
Asegúrese de que su EMAIL_HOST y EMAIL_PORT se establecen justo en settings.py (estos se refieren a su servidor SMTP). Puede suponer que tiene un servidor SMTP ejecutándose en el host local.
Para probar este local, ejecute de Python incorporada en el servidor SMTP de prueba:
python -m smtpd -n -c DebuggingServer localhost:1025
Luego establecer estos valores en su settings.py
EMAIL_HOST='localhost'
EMAIL_PORT=1025
Gatillo un error 500, y debería ver el correo electrónico aparece en la ventana de la terminal python smtpd.
probar este
# ./manage shell
>>> from django.core.mail import send_mail
>>> send_mail('Subject here', 'Here is the message.', '[email protected]',['[email protected]'], fail_silently=False)
Con un [email protected] que en realidad se obtiene de correo electrónico a.
Como dije, ya lo intenté y funciona bien –
Mi proveedor de alojamiento web - Webfaction - sólo permite mensajes de correo electrónico que se enviará un correo electrónico Desde que se ha creado de forma explícita en el panel de administrador. Crear uno solucionó el problema.
Utilizo webfaction y envío correos electrónicos desde googlemail, así que no creo que ese haya sido realmente el problema. –
Es decir, los correos electrónicos de error de Django se envían desde googlemail. –
obviamente le permite enviar correos electrónicos si está utilizando el servidor smtp de google, pero si usa smtp.webfaction.com como anfitrión, no le permitirá a menos que exista el correo electrónico. No cambié nada más y lo arreglé, así que estoy bastante seguro de que fue eso. –
Aunque probablemente no es ideal, he encontrado que el uso de Gmail como el host SMTP funciona bien. Hay una guía útil en nathanostgard.com.
Siéntase libre de publicar sus secciones relevantes de settings.py (incluyendo EMAIL_ *, SERVER_EMAIL, ADMINS (simplemente saque su correo electrónico real), GERENTES y DEPURAR) si desea un conjunto adicional de ojos para verificar si hay errores tipográficos.
Asegúrate de que tienes DEBUG = False
En mi caso la causa faltaba SERVER_EMAIL ajuste.
El valor predeterminado para SERVER_EMAIL
es [email protected]
. Pero muchos de los servidores de correo electrónico que incluyen mi proveedor de correo electrónico no aceptan correos electrónicos de esas direcciones sospechosas. En silencio dejan caer los correos electrónicos.
Al cambiar la dirección de correo electrónico del remitente al [email protected]
se solucionó el problema. En settings.py
:
SERVER_EMAIL = '[email protected]'
Otra sugerencia de que es probable que el problema sea si revisa su registro de correo y ve una entrada que contiene 'notificación de no entrega del remitente'. – jathanism
A pesar de que ha pasado un tiempo, aquí está mi respuesta, de modo que otras personas puedan beneficiarse en el futuro.
En mi caso, lo que impedía que los correos electrónicos se enviaran a la lista ADMINS, cuando se producía un error, era una configuración específica de la aplicación. Estaba usando django-piston, que proporciona los atributos de configuración PISTON_EMAIL_ERRORS y PISTON_DISPLAY_ERRORS. Configurando esto en consecuencia, habilitó al servidor de aplicaciones para notificarlo por correo, siempre que el pistón se bloquee.
Tuve la misma situación. Creé un nuevo proyecto y aplicación y funcionó, así que sabía que era mi código. Lo rastreé hasta el diccionario LOGGING en settings.py.Había hecho algunos cambios hace unas semanas para iniciar sesión con Sentry, pero por alguna razón el error acaba de comenzar hoy. He cambiado de nuevo a la original y tengo trabajo:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler'
}
},
'loggers': {
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
},
}
}
Entonces, hice algunos cambios poco a poco y tengo trabajo con Sentry y correo electrónico a los administradores también.
Además, la configuración LOGGING
se fusionó con DEFAULT_LOGGING
por defecto, por lo que es útil para echar un vistazo a the source code of django.utils.log.DEFAULT_LOGGING
de entender qué más puede tener un efecto sobre su situación particular.
En Django 1.4 esto lo arregló para nosotros. – boatcoder
Esto lo arregló para mí (Django 1.7). Gracias – Paco
La adición de la configuración de registro mató a mis correos electrónicos de administrador, que funcionó bien antes con el registro predeterminado. Supuse que 'disable_existing_loggers ': False' mantendría el registro existente tal cual, pero no fue así. Esto lo solucionó. – guidos
Si, por alguna razón, establece DEBUG_PROPAGATE_EXCEPTIONS en True (es False por defecto), el correo electrónico a admin no funcionará.
Otra posibilidad de error es el problema con la configuración de ADMINS. La siguiente configuración hará que el envío de correo a los administradores falle silenciosamente:
ADMINS = (
('your name', '[email protected]')
)
¿Qué pasa con eso? Así ADMINS tiene que ser una tupla de tuplas, por lo que las necesidades anteriores para tener el formato de
ADMINS = (
('your name', '[email protected]'),
)
Nota del coma final. Sin la coma defectuosa, la dirección "a" en el correo electrónico se formateará incorrectamente (y luego probablemente se descarte silenciosamente en su servidor SMTP).
(Fue gracias a la respuesta de @cathal anterior ejecutando localmente un servidor SMTP de depuración que me permitió localizar esto como mi problema). – wxgeorge
Disculpe si es demasiado ingenuo, pero en mi caso los correos electrónicos se enviaron pero iban directamente a la carpeta SPAM. Antes de intentar cosas más complicadas, consulte primero su carpeta SPAM.
En realidad ... sí. Tuve errores de los rastreadores que intentaban realizar una solicitud de AJAX sin datos de formulario. Sobreestimé la inteligencia de los filtros de spam y terminé con todos los correos electrónicos enviados por Django atrapados por el filtro de spam. –
Por lo que vale, tuve este problema y ninguna de estas sugerencias funcionó para mí. Resultó que mi problema era que SERVER_EMAIL
se configuró en una dirección que el servidor (Webfaction) no reconoció. Si este sitio estuviera alojado en Webfaction (como mis otros sitios son), esto no sería un problema, pero como se trataba de un servidor diferente, los servidores Webfaction no solo verifican la autenticación del correo electrónico que se envía, sino también el valor From:
también.
Otra cosa a destacar aquí es que la configuración de handler500
podrían eludir el mecanismo que envía errores en un 500 si la respuesta desde el punto de vista no tiene un código de estado de 500. Si usted tiene un conjunto handler500
, entonces en ese ver responder con algo como esto.
t = loader.get_template('500.html')
response = HttpResponseServerError(
t.render(RequestContext(request, {'custom_context_var':
'IT BROKE OMG FIRE EVERYONE'})))
response.status_code = 500
return response
En mi caso, es el include_html
en mail_admins
.
Cuando configuro include_html
en True
, el servidor de correo electrónico rechaza enviar mi correo electrónico porque cree que mis correos electrónicos son correo no deseado.
Todo funciona bien cuando configuro include_html
en False
.
... y luego está el error facepalm, cuando se ha utilizado en el desarrollo de este para evitar que los correos electrónicos de salir, y luego copiar accidentalmente el ajuste a la producción:
# Print emails to console
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
(por supuesto que don No los veo impresos en la consola cuando se usa un servidor wsgi). Eliminar la configuración de producción solucionó esto por mí.
Y otra cosa que pueda ir mal (voy a añadir a la lista, para aquellas personas que van a parar aquí a pesar de todas las grandes respuestas anteriores):
Nuestra configuración Django utilizado SendGrid como el SMTP host y tenía una sola dirección de correo electrónico de administrador definida en la configuración de django. Esto funcionó bien durante algún tiempo, pero en algún momento, los correos dejaron de llegar.
Como resultado, la dirección de correo terminó en la lista SendGrid 'Bounced' por algún motivo desconocido, lo que provocó que los correos electrónicos a esa dirección se descartaran para siempre. La eliminación de la dirección de esa lista y su inclusión en la lista blanca solucionó el problema.
- 1. django send_mail con servidor SMTP no puede enviar correo electrónico
- 2. Enviar correo electrónico a múltiples direcciones Android
- 3. Django correo electrónico
- 4. django + enviar correo electrónico en html con django-registration
- 5. vb.net enviar correo electrónico
- 6. ActionMailer no enviar mensajes de correo electrónico correctamente si la: a campo tiene una coma
- 7. Enviar correo electrónico - Cocoa
- 8. ¿Enviar correo electrónico de Elmah?
- 9. ¿Es posible agregar un encabezado al correo electrónico que django envía a los administradores cuando se genera un 500?
- 10. Django - enviar correo electrónico sobre el cambio de modelo
- 11. django para enviar Y recibir un correo electrónico?
- 12. Django correo electrónico resumen
- 13. PHP enviar correo a varias direcciones de correo electrónico
- 14. correo electrónico de plantillas de Django
- 15. C# ASP.NET Enviar correo electrónico a través de TLS
- 16. Enviar correo electrónico HTML a través de C# con SmtpClient
- 17. enviar correo electrónico desde localhost
- 18. iphone app enviar correo electrónico
- 19. cómo enviar correo electrónico HTML
- 20. enviar correo electrónico asp.net C#
- 21. Enviar correo electrónico desde Cocoa
- 22. C# Enviar correo electrónico masivo
- 23. Enviar correo electrónico de activación al usuario
- 24. "Permiso denegado" al intentar enviar un correo electrónico de verificación
- 25. CodeIgniter: adjunto de correo electrónico de los últimos mensajes de correo electrónico no se aclaró al enviar varios correos electrónicos en bucle
- 26. ¿Cómo enviar un correo electrónico en formato richtext a Outlook?
- 27. Guión de shell para enviar correo electrónico
- 28. Enviar correo electrónico-Simulador de Iphone
- 29. Envío de correo electrónico HTML en Django
- 30. Dando un nombre a la cuenta de correo electrónico al enviar correos electrónicos con Django a través de Google Apps
Veo el mensaje, pero si lo configuro de nuevo en mi configuración de correo electrónico no funciona –
también lo agregué, funciona bien, pero aún nada cambia cuando lo restablece a la configuración normal – Harry