2013-08-03 3 views
4

Я пытаюсь перейти от mailcore к mailcore2. Ранее в mailcore выборка структуры тела была такой же простой, как и [msg fetchBodyStructure], где msg - объект CTCoreMessage.Как получить тело электронной почты в mailcore2

С 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, но ни один из них не имеет прямого ответа на сказанное выше.

Может кто-нибудь, пожалуйста, покажет мне простой пример кода для получения всего тела сообщения?

+0

Как об изменении правильного ответа на ответ Gal Бланка? – TJez

+1

хорошо пункт .. сделано – abbood

ответ

14

Я не знаю, почему люди усложнять: это то, как вы запрашиваете тело письма с 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]; 
    }]; 
+0

Вы могли бы подумать, что этот фрагмент кода находится в руководстве «начало работы». Благодарю. – TJez

+0

последняя строка должна быть [webView.mainFrame loadHTMLString: msgHTMLBody baseURL: nil] – Mutahhir

0

Вы хотите RFC 3501, часть 6.4.5 - Команда Fetch, в частности BODY[<section>]. Число относится к сегментам структуры 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, если хотите получить полноту сообщения, но без заголовков.

+0

Отлично! Есть ли способ получить сводку электронной почты или что-то похожее на первые три строки тела, чтобы отобразить ее в почтовом ящике без необходимости получать всю электронную почту? – abbood

+0

Я не могу говорить с mailcore, но с уровня протокола, как только вы получили «BODYSTRUCTURE», чтобы вы могли определить, какую часть вы считаете телом, вы могли бы захватить первый kb или так, используя частичную выборку если ваша библиотека поддерживает его. 'BODY [] <2048>' в протоколе. Я не уверен, насколько широко это поддерживается. – Max

+0

Вопрос касался использования MailCore api. Этот ответ мне не подходит. – TJez

Смежные вопросы