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