我是 iOS 开发的新手。我正在使用MailCore在我的应用程序中获取电子邮件。我的xcode 版本是 4.6.3 和 iOS:6.1 和 5.1。谁能帮我解决我的问题。我从我的服务器收到带有附件计数和描述的邮件,但我没有找到下载此文件的方法或如何获取附件。
请帮我。
谢谢!
这很简单:
首先 - 获取消息 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
}
}];
第二 - 获取消息的结构(不是全部,只需要 - 数组消息列表)
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的更多信息
MCOMessageParser * msg = [MCOMessageParser messageParserWithData:data];
if ([_message.attachments count] > 0)
{
for (int i=0; i<[_message.attachments count]; ++i)
{
MCOIMAPPart *part = [_message.attachments objectAtIndex:i];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex:0];
NSString *filePath = [NSString stringWithFormat:@"%@/%@",
docDir, [part filename]];
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:filePath];
if (NO == fileExists) {
[data writeToFile:filePath atomically:YES];
}
}
}