如何在mailcore2中获取电子邮件正文

时间:2013-08-03 16:26:20

标签: ios objective-c email imap mailcore

我尝试从mailcore迁移到mailcore2。以前在mailcore中,获取正文结构就像[msg fetchBodyStructure]一样简单,其中msg是CTCoreMessage对象。

使用mailcore2,事情似乎更复杂。在用于获取邮件正文的MCOIMAPSession's文档中,我们有:

MCOIMAPFetchContentOperation * op = 
    [session fetchMessageAttachmentByUIDOperationWithFolder:@"INBOX"
                                                        uid:[message uid]
                                                     partID:"1.2"
                                                   encoding:[part encoding]];
 [op start:^(NSError * error, NSData * partData) {
 }];

我完全不知道这个1.2应该引用什么。作者将用户引荐至RFC 822RFC 2822RFC 5322,但他们都没有直接回答上述问题。

有人可以向我展示一个获取整个邮件正文的简单代码示例吗?

2 个答案:

答案 0 :(得分:17)

我不确定为什么人们会让事情复杂化: 这是您使用MailCore2获取电子邮件正文的方式:

MCOIMAPSession *session = [[MCOIMAPSession alloc] init];
    [session setHostname:@"imap.gmail.com"];
    [session setPort:993];
    [session setUsername:[UICKeyChainStore stringForKey:@"username"]];
    [session setPassword:[UICKeyChainStore stringForKey:@"password"]];
    [session setConnectionType:MCOConnectionTypeTLS];
    MCOIMAPFetchContentOperation *operation = [session fetchMessageByUIDOperationWithFolder:@"INBOX" uid:message.uid];

    [operation start:^(NSError *error, NSData *data) {
        MCOMessageParser *messageParser = [[MCOMessageParser alloc] initWithData:data];

        NSString *msgHTMLBody = [messageParser htmlBodyRendering];
        [webView loadHTMLString:msgHTMLBody baseURL:nil];
    }];

答案 1 :(得分:0)

您需要RFC 3501,第6.4.5部分 - 获取命令,特别是BODY[<section>]。 该数字指的是消息的MIME结构的片段。

例如,如果您的消息mime结构如下所示,则为常见格式:

multipart/alternative
|- text/plain
\- text/html

部件和子部件以递归方式编号,如下所示:

multipart/alternative (top-level)
|- text/plain (Part 1)
\- text/html (Part 2)

对于更复杂的格式,例如,附件:

multipart/mixed (top-level)
|- multipart/alternative (Part 1)
|  |- text/plain (Part 1.1)
|  \- text/html (Part 1.2)
\- image/jpeg (Part 2)

如果您想要整个邮件,则部件号通常留空。或者,如果您想要整个邮件,但是没有标题,则可以使用TEXT