GoLang: E-Mail mit Anhängen kann nicht gesendet werden

WBOY
Freigeben: 2024-02-11 13:21:07
nach vorne
962 Leute haben es durchsucht

GoLang: E-Mail mit Anhängen kann nicht gesendet werden

php-Editor Strawberry teilt Ihnen heute ein Problem mit GoLang mit: E-Mails mit Anhängen können nicht gesendet werden. In der täglichen Entwicklung ist das Versenden von E-Mails mit Anhängen ein häufiger Bedarf, aber manchmal stoßen wir auf einige Probleme. In diesem Artikel erfahren Sie, wie Sie dieses Problem lösen und wie Sie E-Mails mit Anhängen erfolgreich versenden können. Wir werden die Ursache des Problems Schritt für Schritt analysieren und entsprechende Lösungen anbieten, in der Hoffnung, allen zu helfen.

Frageninhalt

Ich versuche, eine E-Mail mit Anhang zu senden, indem ich den folgenden Code verwende:

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
}
Nach dem Login kopieren

Sowohl Textinhalte als auch Anhangsinhalte werden als Anhänge in einer Datei mit dem Namen „noname“ angezeigt.

Der Inhalt der angehängten Datei lautet wie folgt:

--d885a04b467ae7d6100eb844c09574a6bdaef0a9796dc6fdde03a90613c9 Codierung der Inhaltsübertragung: Zitat zum Ausdrucken Inhaltstyp: Text/HTML

... --d885a04b467ae7d6100eb844c09574a6bdaef0a9796dc6fdde03a90613c9 Inhaltsdisposition: Anhang; filename="resource_details.csv" Codierung der Inhaltsübertragung: base64 Inhaltstyp: Anwendung/Oktett-Stream

Inhalt des Anhangs..

--d885a04b467ae7d6100eb844c09574a6bdaef0a9796dc6fdde03a90613c9--

Workaround

Ich konnte es zum Laufen bringen:

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
        }))
    }
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonGoLang: E-Mail mit Anhängen kann nicht gesendet werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!