您的位置:首页 > 移动开发 > IOS开发

iOS 邮箱开发

2017-02-23 15:25 99 查看
最近花了几个月用mailcore2开发了一款邮箱,开发中遇到挺多问题的,这里分享一下我开发中遇到的各种问题。都是个人见解,有错误欢迎指出。

说明:本篇文章只讨论IMAP、SMTP协议,不讨论POP3协议。以下是IMAP和SMTP的端口号。

协议链接方式端口号
IMAPSSL993
非SSL143
SMTPSSL465
非SSL25
先上一段登陆代码,下面这段登陆验证的代码,几乎可以通过几大主流邮箱的验证了,什么QQ,神马139,什么163,什么神马,什么企业的,暂时未出现有何不妥。因为本人已亲测三大主流(QQ,139,163)四大企业(这里就不说了,公司秘密)。哈哈。。。。。。。。

MCOIMAPSession *session = [[MCOIMAPSession alloc] init];
[session setUsername:userName];
[session setPassword:password];
[session setHostname:hostName];
[session setPort:port];

session.checkCertificateEnabled = NO;
[session setConnectionType:MCOConnectionTypeTLS];

MCOIMAPOperation *op = checkAccountOperation];
[op start:^(NSError * __nullable error) {

if (error == nil) {

//获取邮件
} else {

//退回登陆界面
}
}];


上面登陆操作也会出现各种各样的坑爹错误。也没有啦,就是自己坑自己而已,因为mailcore2对MCOIMAPSession对象提供了丰富多彩的属性和方法,遇到错,就是你的错了,哈哈,还不赶紧查查少了哪些属性忘记配置了,或者配置错了。

言归正传,解释一下枚举MCOConnectionType,mailcore2提供三种type,如下:

MCOConnectionTypeClear //非SSL

MCOConnectionTypeStartTLS //先非SSL,再转安全的SSL

MCOConnectionTypeTLS //SSL

上面经过认证过的session将贯穿邮件收取操作的整个过程,具体你要怎么对她,那是你的事了,别太粗暴就行。还没有得到她的人,好吧,听我(娓娓道来)你做错了what???

先来点粗暴点的,mailcore二话不说,给你来个crash,叫你偷懒叫你拽,没辙了吧。这时你只需深呼吸,是不是感觉好点了。行,我们继续command+R。。。。。超大字号的F_U_C_K,又crash了。你XX的,老子卸载xcode,不玩鸟。。转行搬砖!!!!话说年轻人,不要这么鸡冻,我看你8成是没有设置hostname的值,什么!!传了?那你看看为不为nil啊,你传个nil反击你个crash,我过分吗?哈哈,传了不为nil,还是崩了,这时就看你造化了,等你经历81难,佛祖会把真经交给你的,到时麻烦也告诉我一下,好东西要分享,互相学习嘛。。好的,再看看下面你可能会遇到的。

Error Domain=MCOErrorDomain Code=1 "A stable connection to the server could not be established." UserInfo={NSLocalizedDescription=A stable connection to the server could not be established.}


这个错误可以从以下三个方面尝试解决:

hostname不存在,或者拼写错误,修改hostname;

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

端口号错误。

Error Domain=MCOErrorDomain Code=5 "Unable to authenticate with the current session's credentials." UserInfo={NSLocalizedDescription=Unable to authenticate with the current session's credentials.}


这个主要是邮箱账号或者密码错误。

Error Domain=MCOErrorDomain Code=4 "The certificate for this server is invalid." UserInfo={NSLocalizedDescription=The certificate for this server is invalid.}


服务器证书无效,可以将checkCertificateEnabled 设置为NO,即session.checkCertificateEnabled = NO;

温馨提示:有些邮箱是要授权码才能登陆的,如QQ,163(测试貌似密码也能登陆),具体的到各自邮箱官网查看。

上班中,打字好累,周六日持续更新… …

补充:各位不好意思,最近赶项目较多加班,这篇文章往后推迟更新
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息