gmail-api : 邮件内容格式被扭曲 (Code Lang : Go)
gmail-api : Mail content formats are getting distorted (Code Lang : Go)
我在 Go 中使用 "google.golang.org/api/gmail/v1" 发送多封内容为 HTML 的邮件。我正在使用 for 循环发送多封内容不同但类型均为 "html".
的邮件
就 API 而言,它工作正常,所有邮件都已送达。但是只有第一封邮件以正确的格式发送,即 HTML(即邮件的接收者以 HTML 格式收到邮件),其余用户收到所有格式的邮件内容为文本(因此所有 HTML 标签在邮件正文中都可见)/
我需要处理任何限制或条件才能成功吗?
请指出我做的错误。
代码片段是:
func main() {
// Get the data from the DB
recipientsList := dbRetrieval()
fmt.Println("About to call the method")
// Invoke the Loop for all the recipients
for indx := range recipientsList {
time.Sleep(time.Second * 10)
fmt.Println("The 3 second wait :", indx)
tokenValueToBeUsed := requestRefreshToken(recipientsList[indx])
if len(tokenValueToBeUsed) == 0 {
err_uid := updateIsDeleted(recipientsList[indx].UserId)
if err_uid {
fmt.Println("Zero refresh token , so updated the DELETE")
} else {
fmt.Println("Zero refresh token But couldnt update the DELETE ")
}
} else {
secret, err := ioutil.ReadFile("client_secret.json")
if err != nil {
log.Printf("Error: %v", err)
} else {
conf, err := google.ConfigFromJSON(secret, gmail.GmailSendScope)
if err != nil {
log.Printf("Error: %v", err)
} else {
var tok oauth2.Token
tok.AccessToken = tokenValueToBeUsed
token := &tok
client := conf.Client(oauth2.NoContext, token)
gmailService, err := gmail.New(client)
if err != nil {
log.Printf("Error: %v", err)
} else {
var message gmail.Message
// For HTML
header := make(map[string]string)
header["From"] = recipientsList[indx].From_Mail
header["To"] = recipientsList[indx].To_Mail
header["Subject"] = recipientsList[indx].Title + "\r\n\r\n" + recipientsList[indx].Body + "\r\n\r\n" + recipientsList[indx].Signature + "\r\n\r\n" + recipientsList[indx].Pixel
header["MIME-Version"] = "1.0"
header["Content-Type"] = "text/html; charset=\"utf-8\""
header["Content-Transfer-Encoding"] = "base64"
var msg string
for k, v := range header {
msg += fmt.Sprintf("%s: %s\r\n", k, v)
}
message.Raw = base64.URLEncoding.EncodeToString([]byte(msg))
// Send the message
_, err_gms := gmailService.Users.Messages.Send("me", &message).Do()
if err_gms != nil {
log.Printf("Error: %v", err_gms)
} else {
err_upd := updateStatus(recipientsList[indx].UUID)
if err_upd {
fmt.Println("Message sent!")
//fmt.Println("The GMAIL response Object Details", gmailResponse)
} else {
fmt.Println("Message sent! But user not updated")
}
}
}
}
}
}
}
}
我不能保证,但您似乎对电子邮件字段顺序有疑问,因为 map
顺序每次都是随机的。尝试用类似的东西替换基于 map
的东西:
header := [][]string{
{"To", recipientsList[indx].To_Mail},
{"From", recipientsList[indx].From_Mail},
{"MIME-Version", "1.0"},
{"Content-Type", "text/html; charset=utf-8"},
{"Content-Transfer-Encoding", "base64"},
{"Subject", recipientsList[indx].Title + "\r\n\r\n" + recipientsList[indx].Body + "\r\n\r\n" + recipientsList[indx].Signature + "\r\n\r\n" + recipientsList[indx].Pixel},
}
var msg string
for _, v := range header {
msg += fmt.Sprintf("%s: %s\r\n", v[0], v[1])
}
我在 Go 中使用 "google.golang.org/api/gmail/v1" 发送多封内容为 HTML 的邮件。我正在使用 for 循环发送多封内容不同但类型均为 "html".
的邮件就 API 而言,它工作正常,所有邮件都已送达。但是只有第一封邮件以正确的格式发送,即 HTML(即邮件的接收者以 HTML 格式收到邮件),其余用户收到所有格式的邮件内容为文本(因此所有 HTML 标签在邮件正文中都可见)/
我需要处理任何限制或条件才能成功吗?
请指出我做的错误。
代码片段是:
func main() {
// Get the data from the DB
recipientsList := dbRetrieval()
fmt.Println("About to call the method")
// Invoke the Loop for all the recipients
for indx := range recipientsList {
time.Sleep(time.Second * 10)
fmt.Println("The 3 second wait :", indx)
tokenValueToBeUsed := requestRefreshToken(recipientsList[indx])
if len(tokenValueToBeUsed) == 0 {
err_uid := updateIsDeleted(recipientsList[indx].UserId)
if err_uid {
fmt.Println("Zero refresh token , so updated the DELETE")
} else {
fmt.Println("Zero refresh token But couldnt update the DELETE ")
}
} else {
secret, err := ioutil.ReadFile("client_secret.json")
if err != nil {
log.Printf("Error: %v", err)
} else {
conf, err := google.ConfigFromJSON(secret, gmail.GmailSendScope)
if err != nil {
log.Printf("Error: %v", err)
} else {
var tok oauth2.Token
tok.AccessToken = tokenValueToBeUsed
token := &tok
client := conf.Client(oauth2.NoContext, token)
gmailService, err := gmail.New(client)
if err != nil {
log.Printf("Error: %v", err)
} else {
var message gmail.Message
// For HTML
header := make(map[string]string)
header["From"] = recipientsList[indx].From_Mail
header["To"] = recipientsList[indx].To_Mail
header["Subject"] = recipientsList[indx].Title + "\r\n\r\n" + recipientsList[indx].Body + "\r\n\r\n" + recipientsList[indx].Signature + "\r\n\r\n" + recipientsList[indx].Pixel
header["MIME-Version"] = "1.0"
header["Content-Type"] = "text/html; charset=\"utf-8\""
header["Content-Transfer-Encoding"] = "base64"
var msg string
for k, v := range header {
msg += fmt.Sprintf("%s: %s\r\n", k, v)
}
message.Raw = base64.URLEncoding.EncodeToString([]byte(msg))
// Send the message
_, err_gms := gmailService.Users.Messages.Send("me", &message).Do()
if err_gms != nil {
log.Printf("Error: %v", err_gms)
} else {
err_upd := updateStatus(recipientsList[indx].UUID)
if err_upd {
fmt.Println("Message sent!")
//fmt.Println("The GMAIL response Object Details", gmailResponse)
} else {
fmt.Println("Message sent! But user not updated")
}
}
}
}
}
}
}
}
我不能保证,但您似乎对电子邮件字段顺序有疑问,因为 map
顺序每次都是随机的。尝试用类似的东西替换基于 map
的东西:
header := [][]string{
{"To", recipientsList[indx].To_Mail},
{"From", recipientsList[indx].From_Mail},
{"MIME-Version", "1.0"},
{"Content-Type", "text/html; charset=utf-8"},
{"Content-Transfer-Encoding", "base64"},
{"Subject", recipientsList[indx].Title + "\r\n\r\n" + recipientsList[indx].Body + "\r\n\r\n" + recipientsList[indx].Signature + "\r\n\r\n" + recipientsList[indx].Pixel},
}
var msg string
for _, v := range header {
msg += fmt.Sprintf("%s: %s\r\n", v[0], v[1])
}