Golang:如何在电子邮件中对主题标题和正文进行 UTF8 编码?

我对如何将包含主题标头和电子邮件正文的字符串(成功地 - 在 UTF8 中)传递给此函数很感兴趣:


func sendEmail(body string) {

    c, err := smtp.Dial(".....")


    if err != nil {

        log.Fatal(err)

    }


    defer c.Close()

    // Set the sender and recipient.

    c.Mail(".....")

    c.Rcpt(".....")


    // Send the email body.

    wc, err := c.Data()

    if err != nil {

        log.Fatal(err)

    }


    defer wc.Close()


    buf := bytes.NewBufferString(body)

    if _, err = buf.WriteTo(wc); err != nil {

        log.Fatal(err)

    }


}

然后我得到了主题标题和电子邮件正文;


body := "Subject: Header string which contains ŽČĆŠĐ in name of user " + name + "!\n" 

body += "Content-Type: text/html; charset=\"UTF-8\"\r\nContent-Transfer-Encoding: base64\r\n" 

body += "String inside email body which also might contain ŽČĆŠĐ" + year_month_day_hour_minute + " - " + end_of_shift


//function call

sendEmail(body)

我认为它应该可以正常运行......它确实正确显示了主题标题字符串(在 utf8 中),但由于某种未知原因,电子邮件正文的其余部分以垃圾形式显示。

http://img3.mukewang.com/62a6ffe00001cfa603340033.jpg

我试图改变一些小细节,但原则上并没有真正改变。

这是我的第一个 Go 示例,因此我很容易忽略显而易见的问题。

感谢您对此事的任何想法!


富国沪深
浏览 156回答 2
2回答

繁星点点滴滴

尝试:在您的文本主题中使用此功能func cSubject(subject string) string {    //return "=?iso-8859-1?Q?" + subject + "?="    return "=?utf-8?q?" + subject + "?="}

慕神8447489

我使用 golang 使用以下代码成功发送了 UTF8 电子邮件func sendContactUs(name string, email string, userInput string) {    // Sender data.    from := "some@email.address"    password := "some password"    // Receiver email address.    to := []string{        "receipient@email.address",    }    // smtp server configuration.    smtpHost := "smtp.gmail.com"    smtpPort := "587"    raw := `Subject: {name} Contact form on WebContent-Type: text/plain; charset="UTF-8"    Dear Manager,    We receive a a form submission from webpage    name  : {name}        email : {email}    message:    {message}    Kind Regards    XXXX  Mailing service team.`    raw = strings.Replace(raw, "{name}", name, -1)    raw = strings.Replace(raw, "{email}", email, -1)    raw = strings.Replace(raw, "{message}", userInput, -1)    // Message.    message := []byte(raw)    // Authentication.    auth := smtp.PlainAuth("", from, password, smtpHost)    // Sending email.    err := smtp.SendMail(smtpHost+":"+smtpPort, auth, from, to, message)    if err != nil {        fmt.Println(err)        return    }    fmt.Println("Email Sent Successfully!")}请注意带有Content-type 的行:它必须从头开始。换句话说,它不应该有任何前置空格。此外,它后面必须有一个空行。这是一个工作代码。请试一试。如果您遇到任何问题,请告诉我。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go