我编写了一个C#WinForms应用程序,该应用程序使用Gmail API创建带附件的邮件草稿并将其上传到Gmail。这直到几个月前都运行良好。代码如下:Gmail API可恢复上传C#桌面应用程序草稿
var service = new GmailService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
MailMessage msg = new MailMessage();
msg.IsBodyHtml = true;
Attachment file = new Attachment(FileLocation);
msg.Attachments.Add(file);
MimeMessage messageMIME = MimeMessage.CreateFromMailMessage(msg); //using MimeKit here
Google.Apis.Gmail.v1.Data.Message m = new Google.Apis.Gmail.v1.Data.Message();
m.Raw = Base64UrlEncode(messageMIME); //private method for Convert.ToBase64String
Draft draft = new Draft();
draft.Message = m;
service.Users.Drafts.Create(draft, "me").Execute();
上述代码现在仅适用于草稿消息大小小于1 MB的情况。当消息/附件超过这个限制,现在该代码发出以下错误:
Google.GoogleApiException: Google.Apis.Requests.RequestError
Request payload size exceeds the limit: 1048576 bytes. [400]
我认为,谷歌改变了它的API,以便它现在需要使用resumable upload protocol与超过1 MB的附件上传草稿。
现在,在上面的代码段的最后一行的过载
service.Users.Drafts.Create(draft, "me", stream, @"message/rfc822");
使用该CreateMediaUpload Class Reference,这允许支持可恢复上传协议上传。但是,无论我如何创建草案主体或编码流,我都无法正确使用此超载来创建和上传任何大小的草稿。构建我的代码的正确方法是什么?或者还有其他一些方法可以使用Gmail API中的可恢复上传协议从C#桌面应用程序上载带有附件的草稿消息?非常感谢所有帮助。
更新
如果我删除的两行代码是添加附件,这行代码:
service.Users.Drafts.Create(draft, "me", stream, @"message/rfc822").Upload();
将创建与Gmail中的正文文本草案。但是,我所能想到的将使用此重载创建和/或传输草稿的附件。我尝试过使用多部分MIME消息,文件流,内存流以及在附件中使用和不使用base64编码的尝试。感谢您阅读这些。
您最后一次尝试将@“message/rfc822”更改为GetMimeType(_uploadFile); – DaImTo
欣赏@DaImTo的建议,但还是无法得到这个工作。 'stream.ReadTimeout'和'stream.WriteTimeout'的'System.InvalidOperationException'。我想知道这条河流与草案组是如何相互关联的。究竟应该流传什么,与草案中的内容有什么关系?这是否需要成为多部分MIME消息?有没有其他方法可以将上传声明为可恢复?将继续探讨这些和其他问题。 – joeschwa
我不记得tbh我一直在挖掘图书馆的代码试图找出它:) – DaImTo