【问题标题】:Example of creating a draft with an attachment in C#?在 C# 中创建带有附件的草稿的示例?
【发布时间】:2014-08-17 21:31:05
【问题描述】:

我用 C# 编写了一个测试应用程序,它使用新的 Gmail API 创建草稿邮件。当消息没有附件时,它可以正常工作。

我正在从 IMAP API 迁移,并已将 MailBee.NET 组件与该 API 一起使用。 MailBee.NET 组件包含一个生成 RFC 2822 消息的类,因此我重用了它,并对消息进行 Base64 编码,并分配给“Raw”属性,如下所述:

https://developers.google.com/gmail/api/guides/drafts

        MailMessage msg = new MailMessage();
        msg.Subject = "test!";
        msg.BodyPlainText = "Test content";
        msg.Attachments.Add(@"D:\Trace.log", "Trace.log", Guid.NewGuid().ToString(), null, null, NewAttachmentOptions.Inline, MailTransferEncoding.Base64);

        Message m = new Message();
        m.Raw = Convert.ToBase64String(msg.GetMessageRawData());

        Draft d = new Draft();
        d.Message = m;
        d = gs.Users.Drafts.Create(d, "me").Execute();

当没有添加附件时它工作正常,但添加一个时失败并返回 500 响应:

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "backendError",
    "message": "Backend Error"
   }
  ],
  "code": 500,
  "message": "Backend Error"
 }
}

有人可以提供一个如何使用 .NET API 执行此操作的示例吗? API 页面上的示例非常简单,并没有提供太多有用信息,文档也不是很好。最好使用 .NET 客户端中包含的 Message / MessagePart / MessagePartBody 类,但是我找不到任何明确的指导或使用示例,所以不知道从哪里开始。

问题:

1) 谁能提供一些使用 .NET 客户端中的类创建带有附件的草稿消息的示例代码?

2) 可以附加多个文件吗?文档自始至终都指的是单个文件,而多部分指南正好指的是两个部分:元数据和附件。

【问题讨论】:

  • “我很可能错误地使用了 Message / MessagePart / MessagePartBody 类。”那么让我们看看你是如何使用它们的。

标签: c# gmail-api


【解决方案1】:

提供您上传的示例“原始”字段肯定有助于调试(base64 编码或直接)。

但这听起来与: GMail API : unable to add an attachment in a draft

【讨论】:

    【解决方案2】:

    还有关于这个: m.Raw = Convert.ToBase64String(msg.GetMessageRawData());

    您要确保您使用来自https://www.rfc-editor.org/rfc/rfc4648#section-5 的“网络安全”(又名“网址安全”)base64 编码字母表

    正如您提到的 URL 的文档中所说: """ 您的应用程序可以使用 drafts.c​​reate 方法创建草稿。一般流程是:

    创建符合 RFC 2822 的 MIME 消息。 将消息转换为 URL 安全的 base64 编码字符串。 创建草稿,将 drafts.message.raw 字段的值设置为编码字符串。 """

    Google API 使用

    【讨论】:

      【解决方案3】:

      就像 GmailGuy 提到的另一个问题的海报一样,这已经神奇地在一夜之间开始工作。所以这一定是Gmail方面的问题。

      关于:

      m.Raw = Convert.ToBase64String(msg.GetMessageRawData());
      

      感谢您的提醒;实际上,我之前已经对其进行了编码,但是在尝试 20 种不同的方法以使其正常工作时,我将其删除并忘记将其重新添加!

      另外,确认一下:是的,当您使用原始消息方法时,您可以添加多个附件。

      【讨论】:

      • 很高兴它现在为您工作,感谢您的确认。毋庸置疑,肯定有 Gmail 人员在查看堆栈溢出以获取错误报告! :)
      • 我猜 msg.GetMessageRawData() 来自您提到的 MailBee.NET 组件?真的没有其他办法了吗?
      猜你喜欢
      • 2019-06-03
      • 2020-04-24
      • 2019-12-06
      • 2016-06-09
      • 2017-06-17
      • 2021-04-27
      • 1970-01-01
      • 1970-01-01
      • 2011-11-23
      相关资源
      最近更新 更多