我正在尝试使用具有RAW和FULL格式的Gmail API阅读电子邮件。对于某些电子邮件,它不会以两种格式返回完整的电子邮件内容。它仅包含标题部分,不包含正文内容。源电子邮件的电子邮件正文中包含数据,但Gmail api无法读取它。当我尝试在本地存储同一封电子邮件时,它显示为“无效的MIME内容”错误
这是我的示例代码
Email Emailobj = null;
UsersResource.MessagesResource.GetRequest MessageGetRequestObj = null;
MessageGetRequestObj = GmailServiceObj.Users.Messages.Get(UserEmailID, ItemID);
MessageGetRequestObj.Format = UsersResource.MessagesResource.GetRequest.FormatEnum.Raw;
MessageGetRequestObj.Fields = "id,threadId,labelIds,internalDate,sizeEstimate,raw,payload";
Emailobj = MessageGetRequestObj.Execute();
这可能是什么问题? Gmail api是否支持加密的电子邮件?
答案 0 :(得分:0)
如此处[1]的format参数中所述,您只能在有效负载字段(如果使用“完整”格式)或原始字段(如果使用“原始”格式)中检索完整的电子邮件数据。 。
如果您使用原始格式,则可以获取包含正文内容的完整电子邮件消息数据,作为以base64url编码的字符串,例如:Emailobj.Raw
[2]。
如果使用完整格式,则可以获取带有完整电子邮件消息数据的对象,包括这样的正文-> Emailobj.Payload
,以获得标题列表-> Emailobj.Payload.Headers
,以获得正文对象-> Emailobj.Payload.Body
。检查有效负载部分[2]以及如何访问其属性[3]。
您还可以在此处[1]使用“尝试此API”功能来检查在运行请求时收到的消息对象[2]的结构。
关于您尝试“本地存储电子邮件”时遇到的错误,根据您的意思,我有2个答案:
如果您只想将Message对象[2]存储在您的Emailobj变量中:
1)您的Emailobj是一个电子邮件类引用(似乎是您的个人类),因此您无法在该变量中存储Google Library中的Message对象类,因为该类没有您的个人类类作为父类。如文档中所述,Message类仅继承自IDirectResponseSchema接口[2]。有关继承的更多信息,请参见[4]。
2)如果您尝试将电子邮件发送到服务器/应用程序:
您应检查要存储电子邮件的目标位置如何期望完整的电子邮件数据,即包含所有数据的编码字符串,具有标头和正文特定结构的Json格式对象,Blob等
编辑
由于您需要将其作为EML发送,因此您应该找到一种创建blob对象的方法,该对象的“ message / rfc2822”作为内容类型(mimeType),而原始字符串作为数据,是从原始格式选项Emailobj.Raw
。也许有帮助[5]。
[1] https://developers.google.com/gmail/api/v1/reference/users/messages/get
[4] https://www.codeproject.com/Articles/1445/Introduction-to-inheritance-polymorphism-in-C
[5] https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-dotnet?tabs=linux