go - 为什么 gmail API 以纯文本形式发送 html 电子邮件?

标签 go gmail-api

我正在尝试使用 gmail API 发送 html 电子邮件,但由于某些原因,它会随机以纯文本/文本形式发送电子邮件。谷歌似乎改变了我设置的内容类型 header 。这有什么理由吗?电子邮件内容始终完全相同(正如我测试的那样)。 API 仍处于实验阶段吗? 有时,当它起作用时,它还会添加 Content-Type: multipart/alternative; (尽管我从未设置过它)。

编码过程如下所示。代码是 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()

最佳答案

嗯,你确定这不是你的程序中的错误吗?您可以打印出整个字符串并将其粘贴到此处吗?

我刚刚使用 Gmail API 发送了一封电子邮件,如下所示:

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 中看起来与预期相符。好吧,实际上看起来它被包装在一个多部分/替代中,并添加了一个文本/纯文本部分(我认为是件好事):

<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电子邮件。

关于go - 为什么 gmail API 以纯文本形式发送 html 电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27895290/

相关文章:

go - reflect.TypeOf 的反转

ruby - 如何使用带有 Ruby Google API Client 的 Gmail API 发送消息?

c# - 由于授权无效,无法从服务帐户使用 GMail Api

c# - 如何使用 Gmail API 阅读整封邮件

go - 无法在现有服务器上使用 go tool pprof

go - 有什么方法可以使用 html.Parse 而不添加节点来生成 'well-formed tree' ?

javascript - 如何在Go中解密使用aes-js包在vuejs中加密的密文

bash - Docker容器不断在终端注册Enter Key

gmail - 从 GMail Web 界面查找 api 消息 ID

google-apps-script - 在 API 中查找 Gmail Snooze 日期