【发布时间】:2021-04-27 00:40:47
【问题描述】:
我正在尝试使用 Gmail API 创建和发送电子邮件草稿。 一周多来,我查看了文档和一些论坛帖子,试图解决这个问题,但我不知道我做错了什么。
这是我用来完成这项工作的最后修改代码:
string URL = "https://gmail.googleapis.com/upload/gmail/v1/users/" + usrEmail + "/drafts?access_token=" + hdfToken.Value;
string mBody = "From: " + txbMail.Text + "\nTo: " + txbDest.Text + "\nSubject: " + txbAssunto.Text + "\n\r\n" + txbMsg.Text + "";
string payload = "{\"message\": {\"raw\": \"" + Base64Encode(mBody) + "\"}}";
using (var client = new HttpClient())
{
var content = new StringContent(payload, Encoding.Default, "message/rfc822");
var response = client.PostAsync($"" + URL, content).Result;
string resultContent = response.Content.ReadAsStringAsync().Result;
JObject jsonObject = JObject.Parse(resultContent);
string draftID = jsonObject["id"].ToString();
hdfID.Value = draftID;
lblID.Text = "#ID: |" + draftID + "|<br>";
//return resultContent;
}
这里是对发送的内容进行编码的方法:
public static string Base64Encode(string plainText)
{
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
return System.Convert.ToBase64String(plainTextBytes).Replace('+', '-').Replace('/', '_').Replace("=", "");
}
我可以创建草稿,但它总是被创建为空的。但是,如果我复制发送的内容(名为“payload”的字符串)并将其放入 Google 测试页面(https://developers.google.com/gmail/api/reference/rest/v1/users.drafts/create),草稿将正确创建 -> 带有发件人电子邮件地址、电子邮件主题、电子邮件正文和我发送的收件人电子邮件地址。 我无法弄清楚我在这里做错了什么,所以我来这里寻求您的帮助。
此代码在 ASP.NET C# webforms 页面中执行。有什么想法吗?
***更新内容如下: 我创建了一个简单的表单来测试 API 并提交了表单。让我们看看数据: Simple Form created to test
在我的草稿文件夹中,结果如下: Empty Draft Message created by my form
一个空的草稿... 如果我复制发送的内容并将其粘贴到测试表上: Google Test API
创建草稿时填写正确的字段: Draft Message with filled fields
这让我快疯了,哈哈。
【问题讨论】:
-
@mason 谢谢你的话。我会用正确的描述更新我的问题。
-
您是否将
Base64Encode()函数的结果与您在 Try this API 上使用的结果进行了比较?您是否在发送消息之前通过记录检查是否有不同之处? -
嗨凯西。是的,我做到了。我将用我所做的一些测试来更新帖子。如果我复制结果并将其粘贴到测试页上,我的草稿将使用正确的信息创建。
标签: c# asp.net google-api http-post gmail-api