首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将-Converting Gmail MessageParts转换为可读文本

将-Converting Gmail MessageParts转换为可读文本
EN

Stack Overflow用户
提问于 2014-09-05 10:35:37
回答 2查看 1.2K关注 0票数 4

我找遍了所有的地方,一直走进死胡同。

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

我已经能够下载消息,并且可以获得除实际电子邮件正文之外的所有内容,该正文深埋在有效负载的MessagePart结构中。

我所追求的是一种方法,以转换的有效载荷的部分,如果可能的话,到Richtext或HTML,或纯文本,如果没有。

目前,我不需要任何图像附件,只需要正文中的文本。

代码语言:javascript
复制
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);
    }
}

任何关于如何将我需要的数据添加到gmail.body中的帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2014-09-05 15:10:29

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

因为我有MIME字符串,所以我只需要做一些替换,然后使用base64解码它

所以解决方案..。

代码语言:javascript
复制
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;
票数 7
EN

Stack Overflow用户

发布于 2016-11-24 16:01:30

以下是目标C中的@Stephen Hammond解决方案(测试和工作):

代码语言:javascript
复制
NSString *body = [self getMimeString:message.payload];

- (NSString*)getMimeString:(GTLRGmail_MessagePart*)parts {
    NSString *body = @"";

    if (parts.parts) {
        for (GTLRGmail_MessagePart *part in parts.parts) {
            body = [NSString stringWithFormat:@"%@\n%@", body, [self getMimeString:part]];
        }
    }
    else if (parts.body.data && !parts.body.attachmentId && [parts.mimeType.lowercaseString isEqualToString:@"text/plain"]) {
        NSString *base64String = [parts.body.data stringByReplacingOccurrencesOfString:@"-" withString:@"+"];
        base64String = [base64String stringByReplacingOccurrencesOfString:@"_" withString:@"/"];

        NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:base64String options:0];
        body = [[NSString alloc] initWithData:decodedData encoding:NSUTF8StringEncoding];

    }

    return body;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25677866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档