Maison  >  Article  >  développement back-end  >  GoLang : Impossible d'envoyer un e-mail avec des pièces jointes

GoLang : Impossible d'envoyer un e-mail avec des pièces jointes

WBOY
WBOYavant
2024-02-11 13:21:07985parcourir

GoLang : Impossible denvoyer un e-mail avec des pièces jointes

l'éditeur php Strawberry partagera avec vous aujourd'hui un problème concernant GoLang : Impossible d'envoyer des emails avec pièces jointes. Dans le développement quotidien, l'envoi d'e-mails avec pièces jointes est un besoin courant, mais nous rencontrons parfois quelques problèmes. Cet article explique comment résoudre ce problème et vous aide à envoyer avec succès des e-mails avec des pièces jointes. Nous analyserons la cause du problème étape par étape et proposerons les solutions correspondantes, dans l'espoir d'aider tout le monde.

Contenu de la question

J'essaie d'envoyer un e-mail avec une pièce jointe en utilisant le code suivant :

package mail

import (
    "bytes"
    logging "project/logging"
    "fmt"
    "log"
    "mime/multipart"
    "net/textproto"

    "gopkg.in/mail.v2"
)

func SendWithAttachment(from string, to []string, subject, bodyHTML string, attachmentName string, attachmentData []byte) error {
    logoURL := "/path/to/cs.jpg"
    m := mail.NewMessage()
    m.SetHeader("From", from)
    m.SetHeader("To", to...)
    m.SetHeader("Subject", subject)
    m.Embed(logoURL)

    // Create a multipart message
    body := &bytes.Buffer{}
    writer := multipart.NewWriter(body)

    // Add HTML part
    htmlPart := make(textproto.MIMEHeader)
    htmlPart.Set("Content-Type", "text/html")
    htmlPart.Set("Content-Transfer-Encoding", "quoted-printable")
    htmlPartWriter, err := writer.CreatePart(htmlPart)
    if err != nil {
        logging.NewDefaultLogger().Errorf("Error creating html part: %s", err)
        return err
    }
    htmlPartWriter.Write([]byte(bodyHTML))

    // Add Attachment part
    attachmentPart := make(textproto.MIMEHeader)
    attachmentPart.Set("Content-Type", "application/octet-stream")
    attachmentPart.Set("Content-Transfer-Encoding", "base64")
    attachmentPart.Set("Content-Disposition", `attachment; filename="`+attachmentName+`"`)
    attachmentPartWriter, err := writer.CreatePart(attachmentPart)
    if err != nil {
        logging.NewDefaultLogger().Errorf("Error creating attachment part: %s", err)
        return err
    }
    attachmentPartWriter.Write(attachmentData)

    writer.Close()

    m.SetBody("multipart/mixed", body.String())

    fmt.Printf("Sending mail.....")
    err = gs.dialer.DialAndSend(m)
    if err != nil {
        logging.NewDefaultLogger().Errorf("Error sending email..: %s", err)
        return err
    }
    return nil
}

Le contenu du texte et le contenu des pièces jointes apparaissent sous forme de pièces jointes dans un fichier nommé « noname ».

Le contenu du fichier ci-joint est le suivant :

--d885a04b467ae7d6100eb844c09574a6bdaef0a9796dc6fdde03a90613c9 Encodage de transfert de contenu : devis imprimable Type de contenu : texte/html

... --d885a04b467ae7d6100eb844c09574a6bdaef0a9796dc6fdde03a90613c9 Disposition du contenu : pièce jointe ; filename="resource_details.csv" Encodage du transfert de contenu : base64 Type de contenu : application/flux d'octets

Contenu des pièces jointes..

--d885a04b467ae7d6100eb844c09574a6bdaef0a9796dc6fdde03a90613c9--

Solution de contournement

J'ai réussi à le faire fonctionner :

m := mail.NewMessage()
    m.SetHeader("From", emailDetails.From)
    m.SetHeader("To", emailDetails.To...)
    m.SetHeader("Subject", emailDetails.Subject)

    if emailDetails.BodyHTML != "" {
        m.SetBody("text/html", emailDetails.BodyHTML)
    } else {
        m.SetBody("text/plain", emailDetails.BodyPlain)
    }

    if emailDetails.AttachmentName != "" && len(emailDetails.AttachmentData) > 0 {
        m.Attach(emailDetails.AttachmentName, mail.SetCopyFunc(func(writer io.Writer) error {
            _, err := writer.Write(emailDetails.AttachmentData)
            return err
        }))
    }

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer