亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

SendGrid SMTP 電子郵件不會發送到 Go 中的抄送和密件抄送地址

SendGrid SMTP 電子郵件不會發送到 Go 中的抄送和密件抄送地址

Go
楊魅力 2022-10-10 17:52:15
我正在嘗試使用 CC 和 BCC 發送電子郵件。電子郵件不會發送到抄送和密送地址。但抄送地址會顯示到收件人的詳細信息。下面給出一個快照。我將 golang net/smtp與SendGrid一起使用。我的代碼示例如下。func SendEmail() error {        email := entity.Email{        From:    "[email protected]",        To:      []string{"[email protected]"},        ReplyTo: "[email protected]",        Subject: "Email Subject",        Body:    "Email Body",        BCC:     []string{"[email protected]"},        CC:      []string{"[email protected]"},    }    emailMessageBytes := ToBytes(email)    smtpAuth := smtp.PlainAuth("", "apikey", config.Config.EmailClientApiKey, config.Config.EmailClientHost)    err := smtp.SendMail(config.Config.EmailClientHost+":"+config.Config.EmailClientPort, smtpAuth, email.From, email.To, emailMessageBytes)    if err != nil {        log.Printf("smtp error: %s", err)        return err    }    return nil}func ToBytes(m entity.Email) []byte {    buf := bytes.NewBuffer(nil)    buf.WriteString(fmt.Sprintf("From: %s\r\n", m.From))    buf.WriteString(fmt.Sprintf("To: %s\r\n", strings.Join(m.To, ",")))    buf.WriteString(fmt.Sprintf("Reply-To: %s\r\n", m.ReplyTo))    if len(m.CC) > 0 {        buf.WriteString(fmt.Sprintf("Cc: %s\r\n", strings.Join(m.CC, ",")))    }    if len(m.BCC) > 0 {        buf.WriteString(fmt.Sprintf("Bcc: %s\r\n", strings.Join(m.BCC, ",")))    }    buf.WriteString(fmt.Sprintf("Subject: %s\r\n", m.Subject))    buf.WriteString("MIME-Version: 1.0\n")    writer := multipart.NewWriter(buf)    boundary := writer.Boundary()    buf.WriteString(fmt.Sprintf("Content-Type: multipart/mixed; boundary=%s\n\n", boundary))    buf.WriteString(fmt.Sprintf("--%s\n", boundary))    buf.WriteString("Content-Type: text/html; charset=utf-8\n")    buf.WriteString(m.Body)    buf.WriteString(fmt.Sprintf("\n\n--%s\n", boundary))    return buf.Bytes()}請幫我。提前謝謝:)
查看完整描述

1 回答

?
收到一只叮咚

TA貢獻1821條經驗 獲得超5個贊

在幕后,smtp.SendMail調用smtp.Client.Rcpt每個to收件人。to切片指示誰將實際收到電子郵件。電子郵件正文中的收件人純粹是信息性的——事實上,他們甚至不需要匹配真實的收件人信息。


因此,要解決您的尋址問題,您需要收集所有to, cc&bcc收件人:


var all []string

for _, a := range [][]string{email.To, email.CC, email.BCC} {

    all = append(all, a)

}


err := smtp.SendMail(

    config.Config.EmailClientHost+":"+config.Config.EmailClientPort,

    smtpAuth,

    email.From,

    all, //email.To,

    emailMessageBytes,

)

此外,由于每個收件人都會收到電子郵件的正文,出于明顯的隱私原因,bcc用戶不應列在正文中。


所以刪除這個:


// if len(m.BCC) > 0 {

//    buf.WriteString(fmt.Sprintf("Bcc: %s\r\n", strings.Join(m.BCC, ",")))

//}


查看完整回答
反對 回復 2022-10-10
  • 1 回答
  • 0 關注
  • 191 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號