mailcore2 的使用与问题解决

前言

MailCore是由MailCore团队开发维护的一个支持POP和IMAP 接收邮件协议以及smtp邮件发送协议。MailCore2是MailCore的下一代产品。

一、下载及运行配置

源码下载:传送门~

通过pod 或者直接下载源码把mailcore2,打开时选择buildmac 文件夹工程直接拖进你的工程

另需要配置一些参数和添加必要的系统支持库如下:

1.、添加CFNetwork.framework、Security.framework、libMailCore-ios.a

2、你的工程build Setting添加:  'Other Linker Flags': -lctemplate-ios -letpan-ios -lxml2 -lsasl2 -liconv -ltidy -lz -lc++ -lresolv -stdlib=libc++ -ObjC  (最新版本设置)

5.build setting 里 Clang 确保LLVM C++ standard library 为libc++

6. Build Phases, add a Target Dependency of static mailcore2 ios.

二、运行成库时遇到的问题

1、MCOErrorDomain Code=5

邮箱帐号或者密码错误,邮箱后缀是否正确。

2、MCOErrorDomain Code=4

服务器证书无效,可以将 checkCertificateEnabled 设置为NO;另网络原因也可能造成连接不上

3、MCOErrorDomain Code=1

a).hostname不存在,或者拼写错误

b).需要SSL安全链接,将connectionType设置为MCOConnectionTypeTLS;

c).端口号错误。

一般配置的端口 imap 993 / smtp 465 ; pop3/smtp 25

4、找不到'libetpan / libetpan.h'、'unicode / udat.h'、'ctemplate / template.h'

libetpan 是C写的为不同类型的邮件访问提供支持邮件支持库,ctemplate 是ctemplate 是一个简单实用、功能强大的文字模板(template language),unicode顾明思义是编码库。一般情况下找不到这些文件是编译前后顺序的问题, 生成了iOS 库再去编译mailcore2 的库才能找到。

a).运行 static mailcore2 ios、再运行 mailcore2 ios

b).再选择你自己的工程运行

三、邮件收发问题

1、邮件中文乱码

a).文件夹名乱码,是由于命名空间未匹配导致

 MCOIMAPFetchNamespaceOperation * op = [imapSession fetchNamespaceOperation];

[op start:^(NSError *__nullableerror, NSDictionary * namespaces) {

            MCOIMAPNamespace * namespace = (imapSession.defaultNamespace !=nil) ? imapSession.defaultNamespace : [namespaces objectForKey:MCOIMAPNamespacePersonal];

if(namespace){

 NSString *folername= [namespace componentsFromPath:imapFolder.path][0]; }}]; 

//namespace 为空时则可能中文乱码

b).邮件正文乱码

NSString *htmlString  =[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

 if(htmlString ==nil|| htmlString.length==0)  

{ htmlString=[[MCOMessageParser messageParserWithData:data] htmlBodyRendering];  //默认使用MC 的转码但很多外界邮箱发来无法解析 }

 2、添加附件

附件分为inlineAttachments 和 新增attachments

MCOAttachment *attachment=[MCOAttachment attachmentWithContentsOfFile:[attachmentModel fileName]];

[attachment setUniqueID:[attachmentModel modelID]];

[attachment setInlineAttachment:NO];//yes or no

[messageBuilder addRelatedAttachment:inlineAttachment];

 [messageBuilder addAttachment:attachment];

四、进一步了解

mailcore2 api文档~~~

理解OAuth 2.0

libetpan 支持库~~

你可能感兴趣的:(mailcore2 的使用与问题解决)