当前位置: 首页 > 编程语言 > C#

带有.Net CLient库的Gmail API:缺少草稿消息分享

时间:2023-04-10 18:08:58 C#

C#学习教程:使用.NetCLient库的GmailAPI:缺少草稿消息我可以成功登录并检索草稿列表,以便身份验证和api正常工作。现在我需要创建Draft类的实例并将其发送到API。但是草稿信息需要是什么样子的呢?不管我在https://developers.google.com/gmail/api/v1/reference/users/drafts/create填写APIexplorer,我的草稿总是空的。此外,当我从C#代码执行此操作时,我需要将draft.Message.Raw字段设置为其他内容我收到错误消息:缺少草稿消息[400]使用客户端库,您可以对电子邮件进行base64编码设置为Message的raw属性,然后将该Message用作Draft的message属性。更一般地说:草稿消息包含一个id和一个消息资源https://developers.google.com/gmail/api/v1/reference/users/drafts{"id":string,"message":users.messagesResource}消息资源应将其“原始”字段设置为base64编码的RCF2822格式字符串。例如:from:me@email.comto:you@email.comsubject:testemailemailbody作为base64编码的字符串是:ZnJvbTogbWVAZW1haWwuY29tDQp0bzogeW91QGVtYWlsLmNvbQ0Kc3ViamVjdDogdGVzdCBlbWFpbA0KDQplbWFpbCBib2R5因此draft.create的请求主体应该类似于:{"message":{"raw":"ZnJvbTogbWVAZW1haWwuY29tDQp0bzogeW91QGVtYWlsLmNvbQ0Kc3ViamVjdDogdGVzdCBlbWFpbA0KDQplbWFpbCBib2R5"}}UntiltodayIhavebeenworkingonit.WhatIdidwasadaptthesolutionatthislinkforadraft.http://jason.pettys.name/2014/10/27/sending-email-with-the-gmail-api-in-net-c/JasonserializesthemailobjectusinganugetcalledAE.Net.MailasRFC2822.我做的是我安装了两个nugetsInstall-PackageGoogle.Apis.Gmail.v1Install-PackageAE.Net.Mail之后我创建了两种方法staticGmailService服务;publicstaticvoidCriaService(stringemailaConectar){varcertificate=newX509Certificate2(Path.Combine(AppDomain.CurrentDomain.BaseDirectory,ClientCredentials.CertificatePath),ClientCredentials.ClientSecret,X509KeyStorageFlags.Exportable);varcredential=newServiceAccountCredential(newServiceAccountCredential.Initializer(ClientCredentials.ServiceAccountEmail){Scopes=new[]{GmailService.Scope.GmailCompose},User=emailaConectar}.FromCertificate(certificate)){};Service=newGmailService(newBaseClientService.Initializer(){HttpClientInitializer=credential,ApplicationName=ClientCredentials.ApplicationName,});}privatestaticstringBase64UrlEncode(stringinput){varinputBytes=System.Text.Encoding.ASCII.GetBytes(input);//特殊的“url-safe”base64编码。返回Convert.ToBase64String(inputBytes).Replace('+','-').Replace('/','_').Replace("=","");在我的主要方法中,我设计了一个CriaService("xpto@gmail.com");varmsg=newAE.Net.Mail.MailMessage{Subject="YourSubject",Body="Hello,World,fromGmailAPI!",From=newMailAddress("xpto@gmail.com")};msg.To.Add(newMailAddress("someone@gmail.com"));msg.ReplyTo.Add(msg.From);varmsgStr=newStringWriter();msg.Save(msgStr);消息m=newMessage();m.Raw=Base64UrlEncode(msgStr.ToString());vardraft=newDraft();draft.Message=m;尝试{Service.Users.Drafts.Create(draft,"xpto@opportunity.com.br").Execute();}catch(Exceptionex){Console.WriteLine(ex.Message);}message>raw应该是完整的SMTP消息{"message":{"raw":"From:me@example.comnTo:you@example.comnSubject:IgnorennTestmessagen"}或者,你也可以在message中设置相应的字段>payload:以上是C#学习教程:withGmailAPIwith.NetCLientlibrary:缺少草稿消息共享的所有内容。如果对大家有用,需要了解更多C#学习教程,希望大家多多关注——{"message":{"payload":{"headers":{{"name":"From","value":"me@example.com},{"name":"To","value":"you@example.com"},{"name":"Subject","value":"Ignore"}},"body":{"data":"测试消息"}}}}本文采集自网络,不代表立场,如涉及侵权,请点击右侧联系管理员删除.若转载请注明出处: