Maison > développement back-end > Golang > 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
Libérer: 2024-02-11 13:21:07
avant
997 Les gens l'ont consulté

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
}
Copier après la connexion

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
        }))
    }
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal