Flask-Mail es una extensión de Flask que facilita el envío de correos electrónicos desde tu aplicación web. En este tema, aprenderás cómo configurar Flask-Mail, enviar correos electrónicos y manejar errores comunes.

  1. Instalación de Flask-Mail

Para comenzar, necesitas instalar Flask-Mail. Puedes hacerlo utilizando pip:

pip install Flask-Mail

  1. Configuración de Flask-Mail

Una vez que Flask-Mail esté instalado, debes configurarlo en tu aplicación Flask. Aquí hay un ejemplo de cómo hacerlo:

from flask import Flask
from flask_mail import Mail, Message

app = Flask(__name__)

# Configuración de Flask-Mail
app.config['MAIL_SERVER'] = 'smtp.gmail.com'
app.config['MAIL_PORT'] = 587
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USERNAME'] = '[email protected]'
app.config['MAIL_PASSWORD'] = 'tu_contraseña'

mail = Mail(app)

Explicación de la Configuración

  • MAIL_SERVER: El servidor SMTP que utilizarás para enviar correos electrónicos. En este caso, estamos usando Gmail.
  • MAIL_PORT: El puerto que utilizará el servidor SMTP. Para Gmail, es 587.
  • MAIL_USE_TLS: Habilita el uso de TLS (Transport Layer Security) para la conexión.
  • MAIL_USERNAME: Tu dirección de correo electrónico.
  • MAIL_PASSWORD: La contraseña de tu correo electrónico.

  1. Enviando un Correo Electrónico

Ahora que Flask-Mail está configurado, puedes enviar correos electrónicos. Aquí hay un ejemplo de cómo hacerlo:

@app.route('/send-email')
def send_email():
    msg = Message('Hello from Flask', 
                  sender='[email protected]', 
                  recipients=['[email protected]'])
    msg.body = 'Este es el cuerpo del correo electrónico'
    msg.html = '<b>Este es el cuerpo del correo electrónico en HTML</b>'
    mail.send(msg)
    return 'Correo enviado!'

Explicación del Código

  • Message: Crea un nuevo mensaje de correo electrónico.
    • subject: El asunto del correo electrónico.
    • sender: La dirección de correo electrónico del remitente.
    • recipients: Una lista de direcciones de correo electrónico de los destinatarios.
    • body: El cuerpo del correo electrónico en texto plano.
    • html: El cuerpo del correo electrónico en formato HTML.
  • mail.send(msg): Envía el mensaje.

  1. Manejo de Errores Comunes

Error de Autenticación

Si recibes un error de autenticación, asegúrate de que tu nombre de usuario y contraseña sean correctos. Además, si estás utilizando Gmail, es posible que necesites habilitar "Acceso de aplicaciones menos seguras" en tu cuenta de Google.

Error de Conexión

Si no puedes conectarte al servidor SMTP, verifica que la configuración del servidor y el puerto sean correctos. También asegúrate de que tu red no esté bloqueando el puerto SMTP.

  1. Ejercicio Práctico

Ejercicio

Crea una ruta en tu aplicación Flask que envíe un correo electrónico de bienvenida a un nuevo usuario cuando se registre.

Solución

from flask import Flask, request, render_template_string
from flask_mail import Mail, Message

app = Flask(__name__)

# Configuración de Flask-Mail
app.config['MAIL_SERVER'] = 'smtp.gmail.com'
app.config['MAIL_PORT'] = 587
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USERNAME'] = '[email protected]'
app.config['MAIL_PASSWORD'] = 'tu_contraseña'

mail = Mail(app)

@app.route('/register', methods=['GET', 'POST'])
def register():
    if request.method == 'POST':
        email = request.form['email']
        msg = Message('Bienvenido a nuestra aplicación', 
                      sender='[email protected]', 
                      recipients=[email])
        msg.body = 'Gracias por registrarte en nuestra aplicación.'
        mail.send(msg)
        return 'Correo de bienvenida enviado!'
    return render_template_string('''
        <form method="post">
            Email: <input type="email" name="email">
            <input type="submit">
        </form>
    ''')

if __name__ == '__main__':
    app.run(debug=True)

Explicación del Código

  • request.method == 'POST': Verifica si el método de la solicitud es POST.
  • request.form['email']: Obtiene la dirección de correo electrónico del formulario.
  • render_template_string: Renderiza un formulario HTML simple para la entrada del correo electrónico.

Conclusión

En esta sección, aprendiste cómo configurar y utilizar Flask-Mail para enviar correos electrónicos desde tu aplicación Flask. Ahora puedes enviar correos electrónicos de bienvenida, notificaciones y más. En el siguiente módulo, exploraremos cómo usar Flask-Admin para crear interfaces de administración.

Curso de Desarrollo Web con Flask

Módulo 1: Introducción a Flask

Módulo 2: Conceptos Básicos de Flask

Módulo 3: Formularios y Entrada de Usuario

Módulo 4: Integración de Bases de Datos

Módulo 5: Autenticación de Usuarios

Módulo 6: Conceptos Avanzados de Flask

Módulo 7: APIs RESTful con Flask

Módulo 8: Despliegue y Producción

Módulo 9: Pruebas y Mejores Prácticas

Módulo 10: Extensiones y Ecosistema de Flask

© Copyright 2024. Todos los derechos reservados