- 将Gmail MessagePart转换为可读文本

Ste*_*ond 4 .net gmail mime c#-4.0

我已经到处寻找并继续陷入死胡同.

我正在尝试使用Google API将gmail下载到C#插件中,然后将其放入父程序可以理解的已创建的邮件对象类中.

我已经到了能够下载消息的地步,我可以获得除了实际的电子邮件正文之外的所有内容,这些正在深埋在有效负载的MessagePart结构中.

我所追求的是一种方法,如果可能的话,将Payload的部分转换为Richtext或HTML,如果没有,则转换为纯文本.

目前我不需要任何图像附件,只需要身体中的文字.

GmailService gs = new GmailService(new Google.Apis.Services.BaseClientService.Initializer() {   ApplicationName = Constant.clientId, HttpClientInitializer = credential });

UsersResource.MessagesResource messagesResource = gs.Users.Messages;
IList<Message> messages = messagesResource.List(userGmail.Value).Execute().Messages;
foreach (Message message in messages)
{
   String messageID = message.Id;
   ReceivedGmail check = ObjectSpace.RetrieveObjectByKeyProperty<ReceivedGmail>(messageID);

   if (check == null)
   {
       messagesResource.Get(userGmail.Value, messageID).Format = UsersResource.MessagesResource.GetRequest.FormatEnum.Raw;

       Message mail = messagesResource.Get(userGmail.Value, messageID).Execute();
       MessagePart mailbody = mail.Payload;

       ReceivedGmail gmail = new ReceivedGmail() { User = User.CurrentUser, Unread = true, mailID = messageID };

       //Get all the header information from the message (Date, Emails, etc.) and add to gmail object.

       //gmail.body = ?????;

       ObjectSpace.StoreObject<ReceivedGmail>(gmail);
    }
}
Run Code Online (Sandbox Code Playgroud)

任何有关如何获取我需要添加到gmail.body的数据的帮助将不胜感激.

Ste*_*ond 7

好吧,更多的搜索和追逐,更多的死胡同,直到最后......

由于我有MIME字符串,我只需要做一些替换,然后使用base64解码它

所以解决方案......

public static String GetMimeString(MessagePart Parts)
    {
        String Body = "";

        if (Parts.Parts != null)
        {
            foreach (MessagePart part in Parts.Parts)
            {
                Body = String.Format("{0}\n{1}", Body, GetMimeString(part));
            }
        }
        else if (Parts.Body.Data != null && Parts.Body.AttachmentId == null && Parts.MimeType == "text/plain")
        {
            String codedBody = Parts.Body.Data.Replace("-", "+");
            codedBody = codedBody.Replace("_", "/");
            byte[] data = Convert.FromBase64String(codedBody);
            Body = Encoding.UTF8.GetString(data);
        }

        return Body;
Run Code Online (Sandbox Code Playgroud)