Heim  >  Artikel  >  Backend-Entwicklung  >  GoLang: E-Mail mit Anhängen kann nicht gesendet werden

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

WBOY
WBOYnach vorne
2024-02-11 13:21:07937Durchsuche

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
}

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
        }))
    }

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen