声明:由于MailCore2 SDK API众多,所以将从功能使用的角度以及结合项目来阐述。

(1)   邮件账户方面:我们需要验证账户,验证通过,则把该账户保存下来。

邮件接收分IMAP和POP协议。

checkAccountOperation

-       (MCOSMTPOperation *) checkAccountOperationWithFrom:(MCOAddress *)from;

-

(2)   验证账户后,我们首先就是要获取文件夹信息,

MCOIMAPFolderInfoOperation类API用来获取邮件文件夹的信息。­­­­

-       (MCOIMAPFolderInfoOperation *) folderInfoOperation:(NSString *)folder;

-       (void) start:(void (^)(NSError * error, MCOIMAPFolderInfo * info))

completionBlock;

fetchAllFoldersOperation

- (void) start:(void (^)(NSError * error, NSArray * folders))completionBlock;

- (MCOIMAPFolderStatusOperation *) folderStatusOperation:(NSString *)folder;

-       (void) start:(void (^)(NSError * error, MCOIMAPFolderStatus * status))

completionBlock;

(3)IMAP API

MCOIMAPSession类基本属性和常用API

@property (nonatomic, copy) NSString *hostname;

@property (nonatomic, assign) unsigned int port;

@property (nonatomic, copy) NSString *username;

@property (nonatomic, copy) NSString *password;

@property (nonatomic, copy) NSString *OAuth2Token;

@property (nonatomic, assign) MCOAuthType authType;

@property (nonatomic, assign) MCOConnectionType connectionType;

- (MCOIMAPFetchFoldersOperation *) fetchSubscribedFoldersOperation;

-       (MCOIMAPOperation *) renameFolderOperation:(NSString *)folder otherName:(NSString *)otherName

-       (MCOIMAPOperation *) deleteFolderOperation:(NSString *)folder

-       (MCOIMAPOperation *) createFolderOperation:(NSString *)folder

-

- (MCOIMAPOperation *) subscribeFolderOperation:(NSString *)folder;

- (MCOIMAPOperation *) expungeOperation:(NSString *)folder;

-       (MCOIMAPOperation *) unsubscribeFolderOperation:(NSString *)folder;

-       (MCOIMAPOperation *) expungeOperation:(NSString *)folder;

- (MCOIMAPAppendMessageOperation

*)appendMessageOperationWithFolder:(NSString *)folder

messageData:(NSData *)messageData

flags:(MCOMessageFlag)flags;

-           (MCOIMAPCopyMessagesOperation *)copyMessagesOperationWithFolder:(NSString *)folder                                                        uids:(MCOIndexSet *)uids                                                       destFolder:(NSString *)destFolder

- (MCOIMAPOperation *) storeFlagsOperationWithFolder:(NSString *)folder

uids:(MCOIndexSet *)uids

kind:(MCOIMAPStoreFlagsRequestKind)kind

flags:(MCOMessageFlag)flags;

- (MCOIMAPOperation *) storeLabelsOperationWithFolder:(NSString *)folder

uids:(MCOIndexSet *)uids

kind:(MCOIMAPStoreFlagsRequestKind)kind

labels:(NSArray *)labels;

-       (MCOIMAPFetchMessagesOperation *)

fetchMessagesByUIDOperationWithFolder:(NSString *)folder

requestKind:(MCOIMAPMessagesRequestKind)requestKind

uids:(MCOIndexSet *)uids;

-       (MCOIMAPFetchMessagesOperation *)

fetchMessagesByNumberOperationWithFolder:(NSString *)folder

requestKind:(MCOIMAPMessagesRequestKind)requestKind

numbers:(MCOIndexSet *)numbers;

-       (MCOIMAPFetchContentOperation *)

fetchMessageByUIDOperationWithFolder:(NSString *)folder

uid:(uint32_t)uid

urgent:(BOOL)urgent;

-          (MCOIMAPFetchContentOperation *) fetchMessageAttachmentByUIDOperationWithFolder:(NSString *)folder                                                                              uid:(uint32_t)uid                                                                           partID:(NSString *)partID                                                                        encoding:(MCOEncoding)encoding                                                                           urgent:(BOOL)urgent;

-       (MCOIMAPSearchOperation *) searchOperationWithFolder:(NSString *)folder                                                  kind:(MCOIMAPSearchKind)kind                                          searchString:(NSString *)searchString;

-       (MCOIMAPSearchOperation *)

searchExpressionOperationWithFolder:(NSString *)folder

expression:(MCOIMAPSearchExpression *)expression;

-       (MCOIMAPMessageRenderingOperation *)

htmlRenderingOperationWithMessage:(MCOIMAPMessage *)message

folder:(NSString *)folder;

-       (MCOIMAPMessageRenderingOperation *)

htmlBodyRenderingOperationWithMessage:(MCOIMAPMessage *)message

folder:(NSString *)folder;

-       (MCOIMAPMessageRenderingOperation *)

plainTextRenderingOperationWithMessage:(MCOIMAPMessage *)message                                                                       folder:(NSString *)folder;

- (MCOIMAPMessageRenderingOperation *) plainTextBodyRenderingOperationWithMessage:(MCOIMAPMessage *)message

folder:(NSString *)folder;

(3)   SMTP API

其基本属性和POP以及IMAP差不多,其主要功能是用来发送邮件。

-       (MCOSMTPSendOperation *) sendOperationWithData:(NSData *)messageData;

- (MCOSMTPSendOperation *) sendOperationWithData:(NSData *)messageData

from:(MCOAddress *)from

recipients:(NSArray *)recipients;

(4)   POP API

Pop会话的基本属性和IMAP类似,但请求有所变化,与IMAP有诸多不同。

-       (MCOPOPFetchMessagesOperation *) fetchMessagesOperation;

-        (MCOPOPFetchHeaderOperation *)

fetchHeaderOperationWithIndex:(unsigned int)index;

-        (MCOPOPFetchMessageOperation *)

fetchMessageOperationWithIndex:(unsigned int)index;

- (MCOPOPOperation *)

deleteMessagesOperationWithIndexes:(MCOIndexSet *)indexes;

-        (MCOPOPOperation *) disconnectOperation

邮件列表加载函数调用顺序说明:

加载masterViewController后,开始加载邮件

调用:

-(void)loadEmail

在loadEmail中,为了展示效果,首先从数据库加载邮件,调用:

-       (void)loadEmailsWithCache:(BOOL)allowed,

然后执行新的邮件检测,调用:

- (void)checkNewEmailShouldSynchnize

而在这个函数中,我们要将上一次的邮件最大UID(已经缓存)和这一次的邮件最大UID做对比,如果存在差值,则证明有新邮件需要同步,否则直接返回,这样加快速度。

我们不知道哪些邮件需要同步,但我们肯定的是没有邮件概要的需要我们去同步,所以,当上面的提到的差值大于0时,那么我们得重新获取列表。拿到的就是最新的20封头,我们会去检测哪些是没有缓存的,这二十封邮件都要检测,是为了防止上次同步失败,当我们获得这个需要同步的邮件队列后,用GCD开启异步线程去加载邮件内容即调用:

-       (void)asynchronousDownloadAllMessagesContent:(NSArray*)filteredMessages,

然后异步加载邮件body,调用:

-       (void)downloadAllMeasseagesContentByMessages:(NSArray *)filteredMessages

AndFinishBlock:(ComplishBlock)finishBlock andIndex:(NSInteger)index

获取完成后,发送通知给Cell,由于cell携带email数据模型,对比下uid即可达到指定更新body的效果。

当所有需要同步的邮件完成UI更新时(cell上body变化),将此邮件列表交由后台处理,保存到数据库,这样FMDB不会占用主线程,所以邮件同步管理类调用:

//本地同步邮件列表数据数据到数据库

-(void)synEmailToDB

MailCore2 SDK API相关推荐

  1. Expo大作战(三十六)--expo sdk api之 ImagePicker,ImageManipulator,Camera

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  2. Expo大作战(三十)--expo sdk api之Permissions(权限管理模块),Pedometer(计步器api)

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  3. 中国移动将向广大开发者开放了SDK/API等开发工具

    7月30日14时消息,中国移动自有操作系统OPhone OS正式开放开发者社区注册,将向广大开发者开放了SDK/API等开发工具. OPhone OS (Open Mobile Phone Opera ...

  4. Android SDK|API

    Android SDK|API http://www.android-doc.com/reference/packages.html posted on 2018-03-30 21:39 飞狐爷 阅读 ...

  5. GPS定位系统,开放GPS定位平台SDK/API

    智启联云位置服务平台,开放GPS定位平台SDK/API,支持二次开发,支持部标JT808或其他协议设备接入

  6. Java三大版本及 JVM JDK JRE 及 SDK API

    目录 1.三大版本 2. JDK JRE JVM 3. SDK API 1.三大版本 JavaSE: 标准版,整个Java的基础及核心,主要用于开发桌面程序及控制台程序. JavaME: 移动版,基本 ...

  7. Expo大作战(二十八)--expo sdk api之Speach(语音文字转换),Segment

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  8. steam游戏上架流程二:steamworks SDK API steamworks.net 对接 unity

    参考: steamworks.net 官方文档的说明 http://steamworks.github.io/gettingstarted/ steam游戏上架流程一:使用官方SDK上传游戏  htt ...

  9. Expo大作战(三十一)--expo sdk api之Payments(expo中的支付),翻译这篇文章傻逼了,完全不符合国内用户,我只负责翻译大家可以略过!...

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

最新文章

  1. 阿里云支撑马来西亚数字自由贸易区落地 帮助马来西亚中小企业参与全球贸易...
  2. Stack Overflow上最热门问题是什么?
  3. c盘users的用户名怎么改_iphone备份太大,严重挤占C盘空间怎么办?不用额外软件将备份放在C盘之外的教程...
  4. 全局使用dva dispatch
  5. linux网络编程之多路I/o转接服务器select
  6. 日志文件和mysql同步到kafka_logstash_output_kafka:Mysql 同步 Kafka 深入详解
  7. C语言的内存管理(堆,栈,代码段,数据段)
  8. linux文件系统选哪种,linux下几种文件系统的测试比较
  9. 搜索推荐广告中的Position Bias:美团DPIN
  10. ntp时间同步会导致mysql关闭吗_NTP 时间同步网络弱电系统安全监测平台研究
  11. Atitit 分期理论 attilax总结
  12. 阿里云刘伟光:核心系统转型之路
  13. mybatis开发中遇到的小问题
  14. LeetCode 6罗马数字转整数
  15. ILSPY反编译工具下载代替收费的Reflector工具
  16. 软件开发全过程必备文档下载(@附所有文档)
  17. 二期开发立项申请书,已经提交,等待批准!
  18. 和周杰讨论:DB2连接问题
  19. cc2538 BSL下载固件
  20. 24点游戏开发实例(Qt含源码)

热门文章

  1. python打印小猪佩琪_极度舒适的 Python 入门教程,小猪佩奇也能学会~
  2. java 死锁种类_用java写一个死锁
  3. 距离向量算法_阿里北大:深度哈希算法最新综述
  4. python模拟app抢票_python并发编程多进程 模拟抢票实现过程
  5. CPU单核多核区别【转载】
  6. 【laravel5.4】迁移文件的生成、修改、删除
  7. SSAS(分析服务)优化手册
  8. 系统中异常公共处理模块 in spring boot
  9. linux日常管理-防火墙selinux
  10. LINUX 内核代码备忘录