Django - Envío de correos electrónicos

Django viene con un motor ligero listo y fácil de usar para enviar correo electrónico. Al igual que en Python, solo necesita una importación de smtplib. En Django solo necesitas importar django.core.mail. Para comenzar a enviar correo electrónico, edite el archivo settings.py del proyecto y configure las siguientes opciones:

  • EMAIL_HOST - servidor smtp.

  • EMAIL_HOST_USER - Credencial de inicio de sesión para el servidor smtp.

  • EMAIL_HOST_PASSWORD - Credencial de contraseña para el servidor smtp.

  • EMAIL_PORT - puerto del servidor smtp.

  • EMAIL_USE_TLS or _SSL - Verdadero si la conexión es segura.

Envío de un correo electrónico sencillo

Creemos una vista "sendSimpleEmail" para enviar un correo electrónico simple.

from django.core.mail import send_mail
from django.http import HttpResponse

def sendSimpleEmail(request,emailto):
   res = send_mail("hello paul", "comment tu vas?", "[email protected]", [emailto])
   return HttpResponse('%s'%res)

Aquí están los detalles de los parámetros de send_mail -

  • subject - Asunto del correo electrónico.

  • message - Cuerpo del correo electrónico.

  • from_email - Correo electrónico de.

  • recipient_list - Lista de direcciones de correo electrónico de los destinatarios.

  • fail_silently - Bool, si es falso send_mail generará una excepción en caso de error.

  • auth_user - Inicio de sesión de usuario si no está configurado en settings.py.

  • auth_password - Contraseña de usuario si no está configurada en settings.py.

  • connection - Backend de correo electrónico.

  • html_message - (nuevo en Django 1.7) si está presente, el correo electrónico será multiparte / alternativo.

Creemos una URL para acceder a nuestra vista -

from django.conf.urls import patterns, url

urlpatterns = paterns('myapp.views', url(r'^simpleemail/(?P<emailto>
   [\w.%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4})/', 
   'sendSimpleEmail' , name = 'sendSimpleEmail'),)

Entonces, cuando acceda a /myapp/simpleemail/[email protected], obtendrá la siguiente página:

Envío de varios correos con send_mass_mail

El método devuelve el número de mensajes entregados correctamente. Es lo mismo que send_mail pero toma un parámetro adicional; datatuple, nuestra vista sendMassEmail será -

from django.core.mail import send_mass_mail
from django.http import HttpResponse

def sendMassEmail(request,emailto):
   msg1 = ('subject 1', 'message 1', '[email protected]', [emailto1])
   msg2 = ('subject 2', 'message 2', '[email protected]', [emailto2])
   res = send_mass_mail((msg1, msg2), fail_silently = False)
   return HttpResponse('%s'%res)

Creemos una URL para acceder a nuestra vista -

from django.conf.urls import patterns, url

urlpatterns = paterns('myapp.views', url(r'^massEmail/(?P<emailto1>
   [\w.%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4})/(?P<emailto2>
   [\w.%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4})', 'sendMassEmail' , name = 'sendMassEmail'),)

Al acceder a /myapp/massemail/[email protected]/[email protected]/, obtenemos -

Los detalles de los parámetros de send_mass_mail son -

  • datatuples - Una tupla donde cada elemento es como (asunto, mensaje, from_email, destination_list).

  • fail_silently - Bool, si es falso send_mail generará una excepción en caso de error.

  • auth_user - Inicio de sesión de usuario si no está configurado en settings.py.

  • auth_password - Contraseña de usuario si no está configurada en settings.py.

  • connection - Backend de correo electrónico.

Como puede ver en la imagen de arriba, se enviaron dos mensajes con éxito.

Note - En este ejemplo estamos usando Python smtp debuggingserver, que puede iniciar usando -

$python -m smtpd -n -c DebuggingServer localhost:1025

Esto significa que todos los correos electrónicos enviados se imprimirán en stdout y el servidor ficticio se ejecutará en localhost: 1025.

Sending e-mails to admins and managers using mail_admins and mail_managers methods

Estos métodos envían correos electrónicos a los administradores del sitio como se define en la opción ADMINS del archivo settings.py, ya los administradores del sitio como se define en la opción ADMINISTRADORES del archivo settings.py. Supongamos que nuestras opciones ADMINS y MANAGERS tienen este aspecto:

ADMINS = (('polo', '[email protected]'),)

MANAGERS = (('popoli', '[email protected]'),)

from django.core.mail import mail_admins
from django.http import HttpResponse

def sendAdminsEmail(request):
   res = mail_admins('my subject', 'site is going down.')
   return HttpResponse('%s'%res)

El código anterior enviará un correo electrónico a cada administrador definido en la sección ADMINS.

from django.core.mail import mail_managers
from django.http import HttpResponse

def sendManagersEmail(request):
   res = mail_managers('my subject 2', 'Change date on the site.')
   return HttpResponse('%s'%res)

El código anterior enviará un correo electrónico a cada administrador definido en la sección ADMINISTRADORES.

Detalles de los parámetros -

  • Subject - Asunto del correo electrónico.

  • message - Cuerpo del correo electrónico.

  • fail_silently - Bool, si es falso send_mail generará una excepción en caso de error.

  • connection - Backend de correo electrónico.

  • html_message - (nuevo en Django 1.7) si está presente, el correo electrónico será multiparte / alternativo.

Envío de correo electrónico HTML

Enviar un mensaje HTML en Django> = 1.7 es tan fácil como -

from django.core.mail import send_mail

from django.http import HttpResponse
   res = send_mail("hello paul", "comment tu vas?", "[email protected]", 
         ["[email protected]"], html_message=")

Esto producirá un correo electrónico alternativo / de varias partes.

Pero para Django <1.7, el envío de mensajes HTML se realiza a través de la clase django.core.mail.EmailMessage y luego llama a 'enviar' en el objeto -

Creemos una vista "sendHTMLEmail" para enviar un correo electrónico HTML.

from django.core.mail import EmailMessage
from django.http import HttpResponse

def sendHTMLEmail(request , emailto):
   html_content = "<strong>Comment tu vas?</strong>"
   email = EmailMessage("my subject", html_content, "[email protected]", [emailto])
   email.content_subtype = "html"
   res = email.send()
   return HttpResponse('%s'%res)

Detalles de los parámetros para la creación de la clase EmailMessage -

  • Subject - Asunto del correo electrónico.

  • message - Cuerpo del correo electrónico en HTML.

  • from_email - Correo electrónico de.

  • to - Lista de direcciones de correo electrónico de los destinatarios.

  • bcc - Lista de direcciones de correo electrónico de los destinatarios “Cco”.

  • connection - Backend de correo electrónico.

Creemos una URL para acceder a nuestra vista -

from django.conf.urls import patterns, url

urlpatterns = paterns('myapp.views', url(r'^htmlemail/(?P<emailto>
   [\w.%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4})/', 
   'sendHTMLEmail' , name = 'sendHTMLEmail'),)

Al acceder a /myapp/htmlemail/[email protected], obtenemos -

Envío de correo electrónico con archivo adjunto

Esto se hace usando el método 'adjuntar' en el objeto EmailMessage.

Una vista para enviar un correo electrónico con archivo adjunto será:

from django.core.mail import EmailMessage
from django.http import HttpResponse

def sendEmailWithAttach(request, emailto):
   html_content = "Comment tu vas?"
   email = EmailMessage("my subject", html_content, "[email protected]", emailto])
   email.content_subtype = "html"
   
   fd = open('manage.py', 'r')
   email.attach('manage.py', fd.read(), 'text/plain')
   
   res = email.send()
   return HttpResponse('%s'%res)

Detalles sobre los argumentos adjuntos -

  • filename - El nombre del archivo a adjuntar.

  • content - El contenido del archivo a adjuntar.

  • mimetype - El tipo de mimo del contenido del archivo adjunto.