我正在尝试使用gmail发送html电子邮件API但由于某些原因,它会随机以纯/文本形式发送电子邮件。谷歌似乎改变了我设置的内容类型标头。有什么原因吗?电子邮件内容一直完全相同(正如我测试的那样)。API仍然是实验性的吗?有时,当它工作时,它还会添加Content-Type: multipart/替代;
(尽管我从未设置过)。
编码过程如下所示。代码是Go,但我猜它不言自明,并且该过程与语言无关。
header := make(map[string]string)
header["From"] = em.From.String()
header["To"] = em.To.String()
// header["Subject"] = encodeRFC2047(em.Subject)
header["Subject"] = em.Subject
header["MIME-Version"] = "1.0"
header["Content-Type"] = "text/html; charset=\"utf-8\""
// header["Content-Transfer-Encoding"] = "base64"
header["Content-Transfer-Encoding"] = "quoted-printable"
var msg string
for k, v := range header {
msg += fmt.Sprintf("%s: %s\r\n", k, v)
}
msg += "\r\n" + em.Message
gmsg := gmail.Message{
Raw: encodeWeb64String([]byte(msg)),
}
_, err = gmailService.Users.Messages.Send("me", &gmsg).Do()
嗯,你确定这不是你程序中的bug吗?你能打印出整个字符串并粘贴到这里吗?
我刚刚使用GmailAPI发送了一封电子邮件,如下所示:
To: <redacted> Subject: test html email 2015-01-14 09:45:40 Content-type: text/html <html><body><b>hello</b>world</body></html>
它看起来和Gmail中收件人的预期一样。嗯,实际上看起来它被包装在一个多部分/替代中,并添加了一个文本/纯部分(好事IMO):
<random trace headers> MIME-Version: 1.0 From: <redacted> Date: Wed, 14 Jan 2015 09:46:41 -0800 Message-ID: Subject: test html email 2015-01-14 09:45:40 To: <redacted> Content-Type: multipart/alternative; boundary=089e0141a9a2875c38050ca05201 --089e0141a9a2875c38050ca05201 Content-Type: text/plain; charset=UTF-8 *hello*world --089e0141a9a2875c38050ca05201 Content-Type: text/html; charset=UTF-8 <html><body><b>hello</b>world</body></html> --089e0141a9a2875c38050ca05201--
在任何情况下,它都在进行一些解析/清理,但确实允许发送文本/html电子邮件。