iOS开发实战:Mailcore深度解析
来源:互联网 发布:ajax jquery json data 编辑:程序博客网 时间:2024/04/30 02:44
MailCore 是一个依赖libetpan,简单封装的IMAP/SMTP邮箱类库
安装这里就不讲了 自己去看 https://github.com/MailCore/MailCore
这里主要讲讲 这个类库的解析以及相关知识的总结,mailcore把程序主要分成了三个部分,SMTP,MIME,以及IMAP(已经把IMAP的功能封装到了一系列的Model中间了):
咱们先说SMTP这块的代码,这里的东西比较少:
首先这里有链接的三种Type
typedef enum { CTSMTPConnectionTypePlain = 0, CTSMTPConnectionTypeStartTLS, CTSMTPConnectionTypeTLS} CTSMTPConnectionType;上面是三中SMTP的链接方式,有不可靠地,有可靠的,有把不可靠变成可靠地,他们分别使用了不同的端口进行链接
https://www.fastmail.fm/help/technical/ssltlsstarttls.html
CTSMTPConnection 这个类中做一件事 就是发件,把你的一系列参数传进去,它会先判断是否可以连接,这里就是对应着他的第二个方法,检查SMTP链接,检查成功就可以继续下面的工作,发件,也就是对应的第二个方法。这里是同步的方法。
相对应的就有异步的方法,CTSMTPAsyncConnection,在这里使用了NSThread来处理异步,并且根据这个线程的状态判断整体发件的状态。
下面我先来说两个名词 SMTP 和 ESMTP,SMTP(Simple Mail TransferProtocol)是简单发件协议,ESMTP就是在上面加了几种验证机制,增加命令EHLO和AUTH,同时也就是说普通的SMTP没有验证机制,但是其实现在基本上都是ESMTP了。详情看这个 http://www.iteye.com/topic/573780,而对应的 mailcore中也建立了 smtp和esmtp两种类,在这两种类中都封装了一个libetpan的类mailsmtp,里面的所有方法基本上都是通过mailsmtp完成的。
ESMTP的几种验证机制: LOGIN模式 基于BASE64编码;PLAIN明文;CRAM-MD5:服务器返回一段字符转,客户端加上自己的账户密码,传回去,这些都是用BASE64加密的,然后服务器再使用MD5验证
详情见下http://linxucn.blog.51cto.com/1360306/837365
下面说Mailcore中的MIME部分
MIME大家都熟悉,是一种文件格式,在这里的意义就是信件内容,因为大家也都知道,信件是分成几个分块的,我们可以根据需要下载我们想要的内容
先说Mailcore的两个工具类:
CTMIMEFactory:作用就是转换作用,把libetpan的mailmime 转化成为CTMIME
CTMIME_Enumerator:MIME迭代器,作用是把一个MIME分成最小的分块,然后输出出来
下面先说MIME在这里有几种,基本分成三种文件头,多部分MIME,独立的MIME,其中独立的MIME又包括了信件内容和附件,
CTMIME_MessagePart比其他MIME多了mailimf_fields存放参数,而CTMIME_MultiPart多了数组来存取子MIME
CTMIME_SinglePart在这里是一个比较重要的类,在这里来区分不同的MIME的类型,并且提供了fetch内容的方法,而且这里还可以做一些拓展,比如说添加是否是内嵌附件的判断,等等,归到底来说,mailcore只是一个对libetpan的简单的封装,很多东西都可以自己拓展的。
最后一部分说Mailcore的模型和其中封装的IMAP方法
首先介绍他的工具类 MailCoreUtilities ,他的作用是转换方法,略去不说
CTCoreAddress 邮件地址类 两个属性,没什么可说的
CTCoreAttachment,CTBareAttachment:每个bareAttchment拥有一个CTMIME_SinglePart,可以由此fetch内容由此转化为他的父类CTBareAttachment
CTCoreAccount:负责连接IMAP服务器和获取Folder,Folder在这里分三种,普通folder,订阅folder,Gmail文件夹extendFolder(用来记录状态的类是 CTXlistResult)
这里面其实有很多种认证方法,下面是libetpan的类型,大家有兴趣可以查下,如果想要添加新的验证方法,可以在account里面添加新的拓展方法
enum { IMAP_AUTH_TYPE_PLAIN, /* plain text authentication */ IMAP_AUTH_TYPE_SASL_ANONYMOUS, /* SASL anonymous */ IMAP_AUTH_TYPE_SASL_CRAM_MD5, /* SASL CRAM MD5 */ IMAP_AUTH_TYPE_SASL_KERBEROS_V4, /* SASL KERBEROS V4 */ IMAP_AUTH_TYPE_SASL_PLAIN, /* SASL plain */ IMAP_AUTH_TYPE_SASL_SCRAM_MD5, /* SASL SCRAM MD5 */ IMAP_AUTH_TYPE_SASL_GSSAPI, /* SASL GSSAPI */ IMAP_AUTH_TYPE_SASL_DIGEST_MD5 /* SASL digest MD5 */};
CTCoreFolder:个人感觉是最重要的类,因为他承担着最重要的任务,获取邮件,改变邮件状态等等,而且从代码量上来看,这也是最多的类
先说一个重要的类型 CTFetchAttributes,这个东西定义了你要去取得邮件的哪些部分,如果你要扩展,可以在这里多加上一些参数
先说明一下IMAP的获取邮件的机制,邮件有两个属性UID和NUM
邮件拥有两个ID都是顺序增长的,区别是UID不会变化,创建的时候是什么一会就是什么,但是NUM会根据当前邮件的状态的变化而变化,简单来说就是如果前面有邮件被删除,邮件num顺序前挪。所以在向前取得邮件的时候可以根据num获取,这样就可以保证获取邮件的数量。
CTCoreMessage:这个folder拥有三个重要的类型( mailmessage,mailimf_single_fields,CTMIME)的参数,其中的基本所有的方法都是是从这三个参数中解出来
说了这么多其实也没说什么,也没有放什么代码,就是简单解析了下mailcore,希望对大家有所帮助。
- iOS开发实战:Mailcore深度解析
- iOS开发实战:SDWebImage深度解析
- mailcore
- 使用MailCore创建iOS邮件客户端(一)
- 使用MailCore创建iOS邮件客户端(二)
- 使用MailCore创建iOS邮件客户端(三)
- 深度解析IOS开发中编码转换方法
- (转载)深度解析IOS开发中编码转换方法
- iOS开发之Masonry框架源码深度解析
- iOS开发之Masonry框架源码深度解析
- iOS开发之Masonry框架源码深度解析
- iOS开发之Masonry框架源码深度解析
- iOS项目开发实战——plist数组解析
- iOS开发之KVO与KVC解析与实战
- ExtJs4开发深度解析
- 深度解析~iOS应用程序~生命周期
- ios深度解析之coreData
- ios学习--block深度解析
- android的intent使用方法
- 金庸武侠小说之我的见解
- VGA驱动
- 《23种设计模式 Lua篇》 - 中介者模式
- unity3d大型手游 可以打包obb文件
- iOS开发实战:Mailcore深度解析
- 设计模式六大原则(5):迪米特法则
- 关于时间复杂度
- linux printf 特殊输出实例
- 实例学习gcc+gdb+make
- Cocos2d-x教程(32)-quick-cocos2d-x 加密
- 二叉树后序遍历和层次遍历
- markdown 最简单入门
- 【转】IE6下Line-height失效问题