3 回答
TA贡献1846条经验 获得超7个赞
我终于明白了。首先,邮件正文不能被转义,但整个 MIME 字符串应该被转义。但是,如前所述,如果我让正文未编码,API 会抱怨无效的字节字符串。
问题是生成的 base64 字符串应该以 URL 安全的方式进行编码。Gmail API 指南中的 python 代码使用了一个被调用的方法urlsafe_b64encode,它不同于普通的 base 64 方法,因为生成的字符串是 URL 安全的。
我以为我可以使用 HTML 或 URL 编码在 C# 中复制它,然后使用标准Convert.ToBase64String方法将 MIME 字符串转换为 base64,但我错了。在搜索 MSDN 网站后,我终于找到了HttpServerUtility.UrlTokenEncode方法,该urlsafe_b64encode方法与python 方法所做的一样,即在 URL 安全变体中对字符串进行编码,并将其转换为 base64。最终代码就变成了:
// Template for the MIME message string (with text/html content type)
var template = @"from: {1}{4}to: {0}{4}subject: {2}{4}MIME-Version: 1.0{4}Content-Type: text/html; charset=UTF-8{4}Content-Transfer-Encoding: base64{4}{4}{3}";
// Fill in MIME message fields
var result = string.Format(template, to, from, subject, body, "\r\n");
// Get the bytes from the string and convert it to a URL safe base64 string
result = HttpServerUtility.UrlTokenEncode(Encoding.UTF8.GetBytes(result));
// Instantiate a Gmail API message and assign it the encoded MIME message
var gMessage = new Message()
{
Raw = result
};
// Use the Gmail API Service to send the email
service.Users.Messages.Send(gMessage, "me").Execute();
- 3 回答
- 0 关注
- 168 浏览
添加回答
举报