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.

Correo electrónico SMTP con archivo CSV adjunto: caracteres adicionales apareciendo al final del archivo.

Estoy creando un cliente de correo electrónico utilizando Golang, para enviar correos electrónicos con un archivo CSV adjunto. Todo funciona bien, excepto que en el archivo adjunto del correo electrónico recibido, puedo ver algunos caracteres adicionales no deseados al final del archivo.

Mi fragmento de código:

import (
    "bytes"
    "encoding/base64"
    "fmt"
    "mime/multipart"
    "net/smtp"
)

...

func SendEmail(cfg Config) error {

    body := bytes.NewBuffer(nil)
    body.WriteString(fmt.Sprintf("From: %s\n", cfg.EmailFrom))
    body.WriteString(fmt.Sprintf("To: %s\n", cfg.EmailTo))
    body.WriteString(fmt.Sprintf("Subject: %s\n", cfg.EmailSubject))

    // archivo csv para adjuntar
    fileContents := `column1,column2,column3\nAAA,BBB,CCC\nDDD,EEE,FFF\n`
    fileContentBytes := []byte(fileContents)

    body.WriteString("MIME-Version: 1.0\n")
    writer := multipart.NewWriter(body)
    boundary := writer.Boundary()

    // adjuntar archivo
    body.WriteString("Content-Type: text/plain\n")
    body.WriteString("Content-Transfer-Encoding: base64\n")
    body.WriteString(fmt.Sprintf("Content-Disposition: attachment; filename=%s\n", "test-filename"))

    encodedBytes := make([]byte, base64.StdEncoding.EncodedLen(len(fileContentBytes)))
    base64.StdEncoding.Encode(encodedBytes, fileContentBytes)
    body.Write(encodedBytes)
    body.WriteString(fmt.Sprintf("\n--%s--", boundary))

    err = smtp.SendMail(cfg.EmailSMTPHost+":"+cfg.EmailSMTPPort,
        nil, cfg.EmailFrom, []string{cfg.EmailTo}, body.Bytes())
    if err != nil {
        return errors.Wrap(err, "smtp.SendMail failed")
    }

    return nil
}

Archivo CSV esperado:

column1,column2,column3
AAA,BBB,CCC
DDD,EEE,FFF

Archivo CSV obtenido:

column1,column2,column3
AAA,BBB,CCC
DDD,EEE,FFF
5k§xõí»ã}8—

¿Hay algo mal en la codificación del contenido del archivo? ¡Cualquier ayuda será apreciada, gracias!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema está con el encabezado Content-Type para el adjunto. Lo has establecido como “text/plain”, lo cual está causando que la codificación se realice incorrectamente.

    Para solucionar esto, cambia el encabezado Content-Type a “text/csv” de la siguiente manera:

    body.WriteString("Content-Type: text/csv\n")
    

    Esto codificará correctamente el archivo CSV y eliminará los caracteres no deseados al final.

    Además, asegúrate de utilizar la codificación correcta para el archivo CSV. En este caso, se recomienda utilizar la codificación UTF-8 para el contenido del archivo.

Comments are closed.