我正在嘗試使用 CC 和 BCC 發送電子郵件。電子郵件不會發送到 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()
}
請幫我。提前謝謝:)
uj5u.com熱心網友回復:
在幕后,smtp.SendMailsmtp.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, ",")))
//}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/343542.html
上一篇:我無法用自動收報機逃脫for回圈
