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

Posted

技术标签:

【中文标题】如何在mailcore2中获取电子邮件正文【英文标题】:how to fetch an email body in mailcore2 【发布时间】:2013-08-04 18:54:39 【问题描述】:

我正在尝试从 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 822、RFC 2822 和RFC 5322,但他们都没有直接回答上述问题。

有人可以给我看一个获取整个消息正文的简单代码示例吗?

【问题讨论】:

把正确答案改成 Gal Blank 的答案怎么样? 【参考方案1】:

您需要 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,如果你想要整个消息,但没有标题。

【讨论】:

太棒了!有没有办法获取电子邮件摘要或正文的前三行之类的内容以在邮箱中显示它而不必获取整个电子邮件? 我无法与 mailcore 交谈,但从协议级别来看,一旦您获得了BODYSTRUCTURE,因此您可以确定您认为哪个部分是正文,您可以获取第一个如果您的库支持,请使用部分提取 kb 左右。协议中的BODY[]<2048>。我不确定它的支持范围有多广。 问题是关于使用 MailCore api。这个答案看起来与我无关。【参考方案2】:

我不确定人们为什么要把事情复杂化: 这就是您使用 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];
    ];

【讨论】:

您会认为这段代码会在“入门”指南中。谢谢。 最后一行应该是 [webView.mainFrame loadHTMLString:msgHTMLBody baseURL:nil]

以上是关于如何在mailcore2中获取电子邮件正文的主要内容,如果未能解决你的问题,请参考以下文章

如何使用mailcore2获取邮件的发件人资料图片

在 Swift 中发送 Mailcore2 普通电子邮件

MailCore2 - 在不下载图像或附件的情况下获取邮件内容?

使用 mailcore2 在 gmail 帐户中创建标签

Mailcore2 - 从特定日期开始搜索电子邮件

应用程序运行时在后台使用 SMTP Mailcore2 发送邮件