template example emailmultialternatives email_host correo django email smtp

example - send correo django



EmailBackend para enviar correos electrónicos a través de múltiples SMTP en Django (5)

Lo siento, no puedo comentar directamente sobre el resto de las respuestas, no hay suficientes representantes.

Solo una adición:

connection = get_connection(host=my_host, port=my_port, username=my_username, password=my_password, user_tls=my_use_tls)

debiera ser

connection = get_connection(host=my_host, port=my_port, username=my_username, password=my_password, use_tls=my_use_tls)

Es solo un problema si NO está utilizando TLS (y debería), ya que su valor predeterminado es True.

Hacer que Django envíe un correo electrónico está muy bien explicado here utilizando la configuración estándar que se muestra a continuación.

EMAIL_BACKEND = ''django.core.mail.backends.smtp.EmailBackend'' EMAIL_HOST = "mail.mysmtpserver.somewhere" #EMAIL_PORT EMAIL_HOST_USER = "my@login" EMAIL_HOST_PASSWORD = "mypassword" #EMAIL_USE_TLS = True

Luego usando django.core.mail.EmailMessage para enviarlo.

Sin embargo, ¿qué sucede si está ejecutando varios sitios y necesita que cada uno de ellos envíe correos electrónicos a través de su propio servidor SMTP (o simplemente inicie sesión diferente en el mismo servidor SMTP)?

La búsqueda de un EmailBackend como este o una forma de hacerlo con el backend actual no produjo ningún resultado satisfactorio.


Puede ser una idea echar un vistazo al backend de correo electrónico de django y crear uno personalizado.

aquí está el código: https://github.com/django/django/blob/master/django/core/mail/backends/smtp.py

Este ejemplo muestra cómo puede crear uno personalizado (este usa SMTP_SSL en lugar de SMTP):

https://gist.github.com/jsummerfield/1486891

y lo bifurqué para combinar ambos (para poder usar un backend para diferentes sitios con diferentes configuraciones de correo):

https://gist.github.com/iamit/5415771

No estoy seguro de si eso funcionará, pero como ve, todos los códigos anteriores vuelven a abrir la conexión si ya hay una conexión ... Entonces, tal vez haya un comienzo para su solución ... no lo haga, cierre la conexión abierta y volver a abrir con diferentes configuraciones ... (no estoy seguro de si eso funciona).


Si desea sobrescribir la configuración proporcionada, puede crear su propia conexión y send_email a send_email o EmailMessage

from django.core.mail import get_connection, send_mail from django.core.mail.message import EmailMessage # TODO: Insert clever settings mechanism my_host = '''' my_port = 587 my_username = '''' my_password = '''' my_use_tls = True connection = get_connection(host=my_host, port=my_port, username=my_username, password=my_password, use_tls=my_use_tls) send_mail(''diditwork?'', ''test message'', ''from_email'', [''to''], connection=connection) # or EmailMessage(''diditwork?'', ''test message'', ''from_email'', [''to''], connection=connection).send(fail_silently=False)

Actualización: asegúrese de cerrar la conexión después de su uso, @ michel.iamit los puntos de respuesta al código que muestra la conexión se almacena en caché para smpt. @dhackner answer muestra cómo cerrar automáticamente una conexión usando with statement.


Yo modificaría ligeramente la respuesta de Daniel Backman para usar un administrador de contexto como en los documentos. Se ocupará de las llamadas open () y close () por sí mismo.

from django.core.mail import get_connection, send_mail from django.core.mail.message import EmailMessage with get_connection( host=my_host, port=my_port, username=my_username, password=my_password, use_tls=my_use_tls ) as connection: EmailMessage(subject1, body1, from1, [to1], connection=connection).send()

https://docs.djangoproject.com/en/dev/topics/email/#email-backends


use una configuración diferente para cada sitio.

Una forma es tener, además de su settings.py , una settings_SITENAME.py para cada sitio. estos archivos tendrán la configuración personalizada del servidor de correo. cada sitio tendrá settings_local.py será un enlace simbólico a su propio archivo de configuraciones personalizadas

luego ponga esta estrofa en la parte inferior de settings.py :

try: from settings_local import * except ImportError: pass

ahora tiene configuraciones personalizadas por sitio