es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Flask-Mail ¿cómo agregar múltiples archivos a un mensaje?

Quiero agregar varios archivos como adjunto, pero no logro entender cómo.

Mi código ahora se ve así:

@form.post('/')
def obtener_datos_del_formulario():
    mensaje = request.form['mensaje']
    grecaptcha = request.form['g-recaptcha-response']
    remote_ip = request.remote_addr
    archivos = request.files.getlist('file')
    correo = Message('EMAIL DESDE FORMULARIO', recipients=['admin@****'])
    if verificar_recaptcha(grecaptcha, remote_ip):
        for archivo in archivos:
            tipo_mimetype = archivo.content_type
            nombre_archivo = secure_filename(archivo.filename)
            correo.attachments = archivo
            correo.attach(nombre_archivo, tipo_mimetype)
        correo.body = mensaje
        try:
            mail.send(correo)
            return {'msg': 'El mensaje ha sido enviado'}
        except Exception as err:
            logger.debug(err)
            return {'msg': False}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para agregar varios archivos como adjuntos en Flask-Mail, primero necesitas recuperar los archivos del formulario utilizando el método request.files.getlist('file'). Esto devolverá una lista de archivos cargados a través de una entrada de formulario con el nombre file.

    Luego puedes recorrer la lista de archivos y crear adjuntos para cada archivo utilizando el método msg.attach(). Aquí tienes una versión actualizada del código:

    @form.post('/')
    def obtener_datos_del_formulario():
        message = request.form['message']
        grecaptcha = request.form['g-recaptcha-response']
        remote_ip = request.remote_addr
        files = request.files.getlist('file')
        msg = Message('CORREO ELECTRÓNICO DEL FORMULARIO', recipients=['admin@****'])
        if check_recaptcha(grecaptcha, remote_ip):
            for file in files:
                mimetype = file.content_type
                filename = secure_filename(file.filename)
                msg.attach(filename, mimetype, file.read())
            msg.body = message
            try:
                mail.send(msg)
                return {'msg': 'El mensaje ha sido enviado'}
            except Exception as err:
                logger.debug(err)
                return {'msg': False}
    

    Ten en cuenta que estamos utilizando el método file.read() para obtener el contenido del archivo como bytes. Esto es necesario porque Flask-Mail espera que el contenido del adjunto sea bytes en lugar de un objeto de archivo.

Comments are closed.