Envío de correos electrónicos con Django: Tutorial de EmailMessage

Envío de correos electrónicos con Django: Tutorial de EmailMessage

Django incluye un módulo dedicado expresamente a manipular y enviar emails. Dentro encontramos funciones como send_message para usos simples o la clase EmailMessage, más sofisticada. En este tutorial, vamos a aprender a utilizar la clase EmailMessage para enviar correos electrónicos personalizados.

Configuración

Lo primero que debemos hacer es configurar Django para enviar correos electrónicos. Para ello, debemos editar el archivo settings.py y añadir las siguientes líneas:

Python
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'tu_correo@gmail.com'
EMAIL_HOST_PASSWORD = 'tu_contraseña'
EMAIL_USE_TLS = True

Estas líneas configuran el servidor SMTP de Gmail para enviar correos electrónicos. En lugar de Gmail, también puedes utilizar otro servidor SMTP, como el de tu proveedor de correo electrónico.

Creando un objeto EmailMessage

Para enviar un correo electrónico con Django, debemos crear un objeto de la clase EmailMessage. Este objeto representa el correo electrónico que queremos enviar.

Python
from django.core.mail import EmailMessage

email = EmailMessage(
    subject='Asunto del correo electrónico',
    body='Cuerpo del correo electrónico',
    from_email='tu_correo@gmail.com',
    to_email='destinatario@example.com',
)

Los argumentos de EmailMessage son los siguientes:

  • subject: El título del correo electrónico.
  • body: El cuerpo del correo electrónico.
  • from_email: La dirección de correo electrónico del remitente.
  • to_email: La dirección de correo electrónico del destinatario.

Enviando el correo electrónico

Una vez creado el objeto EmailMessage, podemos enviarlo utilizando el método send().

Python
email.send()

Esto enviará el correo electrónico al destinatario especificado.

Ejercicio

Vamos a crear un pequeño ejemplo para enviar un correo electrónico de bienvenida a un nuevo usuario.

Python
from django.core.mail import EmailMessage
from django.contrib.auth.models import User

def send_welcome_email(user):
    email = EmailMessage(
        subject='Bienvenido a nuestra página web',
        body='Hola {username}, bienvenido a nuestra página web.'.format(username=user.username),
        from_email='tu_correo@gmail.com',
        to_email=user.email,
    )
    email.send()

if __name__ == '__main__':
    user = User.objects.create_user('username', 'email@example.com', 'password')
    send_welcome_email(user)

Este ejemplo crea un objeto User con el nombre de usuario username y la dirección de correo electrónico email@example.com. A continuación, llama a la función send_welcome_email(), que envía un correo electrónico de bienvenida al usuario.

Personalizando el correo electrónico

Podemos personalizar el correo electrónico utilizando los siguientes métodos:

  • add_alternative(): Añade un cuerpo alternativo en formato HTML.
  • bcc_email(): Añade una dirección de correo electrónico de correo ciego.
  • cc_email(): Añade una dirección de correo electrónico de copia.
  • reply_to_email(): Establece la dirección de correo electrónico de respuesta.
  • extra_headers(): Añade encabezados personalizados al correo electrónico.

Conclusión

Django ofrece una forma sencilla de enviar correos electrónicos. La clase EmailMessage nos permite crear correos electrónicos personalizados con facilidad.