4

iOS開発初心者です。アプリケーションでメールを取得するためにMailCoreを使用しています。私のxcode バージョンは 4.6.3 と iOS:6.1 および 5.1です。誰でも私の問題を整理するのを手伝ってもらえますか? サーバーから添付ファイルの数と説明を含むメールを受け取りましたが、このファイルをダウンロードする方法や、添付ファイルを取得する方法が見つかりませんでした。

私を助けてください。

ありがとう!

4

2 に答える 2

3

それはとても簡単です:

まず最初に - メッセージ uid を取得します

MCOIndexSet *uidSet = [MCOIndexSet indexSetWithRange:MCORangeMake(1,UINT64_MAX)];//for all msgs
MCOIMAPSession *session = <new or reuse IMAP session, i reuse this>
MCOIMAPFetchMessagesOperation *fetchOp =
[session fetchMessagesByUIDOperationWithFolder:@"INBOX"
                                    requestKind:MCOIMAPMessagesRequestKindFullHeaders
                                           uids:uidSet];

[fetchOp start:^(NSError *err, NSArray *messagesList, MCOIndexSet *vanished) {
    if (!err) {            
        NSLog(@"Receive %i messages",(int)[messagesList count]);
        NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"header.date" ascending:NO];
//upd UI
        [[NSNotificationCenter defaultCenter] postNotificationName:kNotif_postCollector_ReceiveMessages object:nil];
//store msgs
        [[DataSingleton sharedSingleton] updateMessageListWithMessages:[messagesList sortedArrayUsingDescriptors:@[sort]]];
    }else{
        //oh no
    }
}];

2 番目 - メッセージの構造を取得します (すべてではなく、必要なだけです - 配列 messagesList)

MCOIndexSet *uidSet = [MCOIndexSet indexSet];
for (Message *message in messagesList)// i use this class to store msgs. mcUid = MailCore Uid
    [uidSet addIndex:[[message mcUid] integerValue]];

MCOIMAPSession *session = <new or reuse IMAP session, i reuse this>
MCOIMAPFetchMessagesOperation *fetchOp =
[session fetchMessagesByUIDOperationWithFolder:@"INBOX"//or another folder
                                   requestKind:MCOIMAPMessagesRequestKindStructure
                                          uids:uidSet];

[fetchOp start:^(NSError *err, NSArray *messagesList, MCOIndexSet *vanished) {

    if (!err) {

        NSLog(@"Receive %i messages with structures",(int)[messagesList count]);
        NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"header.date" ascending:NO];
        //store attachment precence
        [[DataSingleton sharedSingleton] updateAttachmentsPresenceForMessages:[messagesList sortedArrayUsingDescriptors:@[sort]]
                                                            forAccount:acc];
/* You get array of this objects:
MCOIMAPPart : MCOAbstractPart
//A part identifier looks like 1.2.1
@property (nonatomic, copy) NSString * partID;
//The size of the single part in bytes
@property (nonatomic, nonatomic) unsigned int size;
//It's the encoding of the single part
@property (nonatomic, nonatomic) MCOEncoding encoding;
*/
    }
}];

ステップ番号 3 と最終ステップ:

MCOIMAPSession *session = <new or reuse IMAP session, i reuse this>
int uid = [[message mcUid] intValue];
NSString *partID = [attachment mcPartID];//we stored it on step 2
MCOIMAPFetchContentOperation * op = [session     fetchMessageAttachmentByUIDOperationWithFolder:@"INBOX"
  uid:uid
  partID:partID
  encoding:(MCOEncoding)[[attachment mcEncoding] integerValue]];

NSLog(@"download att %i part %@",uid,partID);
[op start:^(NSError * error, NSData * messageData) {

    if (error) {

    }else{
        TRACE(@"receive att %i part %@",uid,partID);
        //save attachment fo local disc
        [[DataSingleton sharedSingleton] updateDownloadedAttachment:attachment
                                                           withData:messageData];
    }
}];

詳細については、GitHubおよび公式ページlibmailcore.comを参照してください。

于 2013-10-01T00:13:13.013 に答える