我正在嘗試使用 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, ",")))
//}
- 1 回答
- 0 關注
- 191 瀏覽
添加回答
舉報
0/150
提交
取消