IOS使用mailcore2发送邮件,qq邮箱发送_airmail unable to authenticate with the current se-程序员宅基地

技术标签: IOS笔记  qq邮箱  邮件  ios  

1.首先获取mailcore2的代码

git clone https://github.com/MailCore/mailcore2/

2.将下载的代码拷贝到项目文件目录下,打开自己的工程将下载的mailcore2工程文件mailcore2.xcodeproj直接拉到自己的工程下面
下载中的目录为build-mac/mailcore2.xcodeproj

3.将静态库添加到工程中
(1)在 Link Binary With Libraries 中添加:

libMailCore-ios.a  

(2)在 Target Dependencies 中添加:

static maincore2 ios 

(3)在 Link Binary With Libraries 中添加系统包:

CFNetwork.framework  
Security.framework  

4.设置编译链接选项
(1)在other linker flag 中添加:

-lctemplate-ios -letpan-ios -lxml2 -lsasl2 -liconv -ltidy -lz -lc++ -stdlib=libc++ -ObjC -lresolv  

(2)在C++ Standard Library选择:

libc++

5.选择target编译静态包

mailcore ios
static mailcore2 ios

6.添加环境变量
选择product->scheme->edit scheme->Run->Arguments->Environment Variables添加OS_ACTIVITY_MODE值威disable
二。我们使用SMTP来发送邮件
1.首先编辑发送参数,调用登陆校验方法

- (void)mailCorelogin
{
    _smtpSession = [[MCOSMTPSession alloc] init];
    _smtpSession.hostname = @"smtp.qq.com";//qq邮箱地址
    _smtpSession.port = 587;//qq邮箱端口号
    _smtpSession.username = @"[email protected]";
    _smtpSession.password = @"xxxxxxxx";//qq邮箱开启SMTP服务之后的**授权码**不是邮箱原始的密码
    _smtpSession.connectionType = MCOConnectionTypeStartTLS;//https


    MCOSMTPOperation *smtpOperation = [self.smtpSession loginOperation];
    [smtpOperation start:^(NSError * error) {
        if (error == nil) {
            NSLog(@"login successed");
        } else {
            NSLog(@"login failure: %@", error);
        }  
    }];
}

二,设置发送具体信息

-(void)buildMessage
{
    // 构建邮件体的发送内容
    MCOMessageBuilder *messageBuilder = [[MCOMessageBuilder alloc] init];
    messageBuilder.header.from = [MCOAddress addressWithDisplayName:@"张三" mailbox:@"[email protected]"];   // 发送人
    messageBuilder.header.to = @[[MCOAddress addressWithMailbox:@"[email protected]"]];       // 收件人(多人)
//    messageBuilder.header.cc = @[[MCOAddress addressWithMailbox:@"@333333qq.com"]];      // 抄送(多人)
//    messageBuilder.header.bcc = @[[MCOAddress addressWithMailbox:@"[email protected]"]];    // 密送(多人)
    messageBuilder.header.subject = @"测试邮件";    // 邮件标题
    messageBuilder.textBody = @"hello world";           // 邮件正文

    /*
     如果邮件是回复或者转发,原邮件中往往有附件以及正文中有其他图片资源,
     如果有需要你可将原文原封不动的也带过去,这里发送的正文就可以如下配置
     */
    NSString * bodyHtml = @"<p>我是原邮件正文</p>";
    NSString *body = @"我是邮件回复的内容";
    NSMutableString*fullBodyHtml = [NSMutableString stringWithFormat:@"%@<br/>-------------原始邮件-------------<br/>%@",[body stringByReplacingOccurrencesOfString:@"\n"withString:@"<br/>"],bodyHtml];
    [messageBuilder setHTMLBody:fullBodyHtml];
    [self sendMessage:messageBuilder];
}
-(void)sendMessage:(MCOMessageBuilder *)messageBuilder
{
    NSData * rfc822Data =[messageBuilder data];
    MCOSMTPSendOperation *sendOperation = [self.smtpSession sendOperationWithData:rfc822Data];
    [sendOperation start:^(NSError *error) {
        if (error == nil) {
            NSLog(@"send successed");
        } else {
            NSLog(@"send failure: %@", error);
        }  
    }];
}

三。一些问题
1.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.}
这个错误主要是邮箱帐号或者密码错误。邮箱后缀是否正确(qq邮箱填的密码就是发送短信之后显示的授权码,而不是直接填原始密码)
2.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.}
这个错误可以从以下三个方面尝试解决:
1.hostname不存在,或者拼写错误,修改hostname;该hostname不一定是 imap.**.com,我项目中用到的hostname是 10.101.10.1(主机名)。
2.需要SSL安全链接,将connectionType设置为MCOConnectionTypeTLS;
3.端口号错误。

参考文献:
1,http://blog.csdn.net/qq510304723/article/details/50150303
2.https://www.jianshu.com/p/558b3bd9f88d

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ios_lujian/article/details/78875046

智能推荐

C语言程序实例100个_程序编程案例-程序员宅基地

文章浏览阅读761次。【程序29】题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。程序分析:学会分解出每一位数,如下解释:2.程序源代码:main( )a=x/10000;分解出万位分解出千位分解出百位分解出十位/ e=x%10;分解出个位/ if (a!else if (b!else if (c!else if (d!else if (e!【程序30】题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。_程序编程案例

新手如何有效避免Pybind11使用的各种坑【undefine symbol xxx, dynamic module does not define xxx等】_pybind11报错-程序员宅基地

文章浏览阅读1.2k次,点赞21次,收藏19次。新手使用pybind11的过程中遇到的一些坑及解决办法!_pybind11报错

Linux串口调试助手_linux 串口调试助手-程序员宅基地

文章浏览阅读3.1k次。基于网上资料对相关概念做整理汇总,部分内容引用自文后文章。_linux 串口调试助手

(附源码)ssm基于微信小程序的社区老人健康管理服务系统的设计与实现 毕业设计011513_基于微信小程序的社区管理系统设计论文-程序员宅基地

文章浏览阅读2k次,点赞7次,收藏30次。对于本社区老人健康管理服务系统的设计来说,通过科学的管理方式、便捷的服务提高了工作效率,减少了数据存储上的错误和遗漏。社区老人健康管理服务系统使用Java语言,采用基于MVVM模式的SSM技术进行开发,使用 Eclipse 2017 CI 10 编译器编写,数据方面主要采用的是微软的MySQL关系型数据库来作为数据存储媒介,配合前台HTML+CSS 技术完成系统的开发。具体根据社区老人健康管理服务系统的现状来进行开发的,具体根据用户需求实现社区老人健康管理服务系统网络化的管理,各类信息有序地进行存储...._基于微信小程序的社区管理系统设计论文

Java中的Action、Service和DAO层功能区分及示例解释-程序员宅基地

文章浏览阅读555次。Action/Service/DAO简介:Action是管理业务(Service)调度和管理跳转的。Service是管理具体的功能的。Action只负责管理,而Service负责实施。DAO只完成增删改查,虽然可以1-n,n-n,1-1关联,模糊、动态、子查询都可以。但是无论多么复杂的查询,dao只是封装增删改查。至于增删查改如何去实现一个功能,dao是不管的。总结这三者,通过例子来解释:Acti..._java中action

Servlet详解-程序员宅基地

文章浏览阅读321次。Servlet (Server Applet),全称Java Servlet。是用Java编写的服务器端程序,其,生成动态的Web内容。Servlet运行于支持Java的应用服务器中(如Tomcat等)。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下,servlet只用来扩展基于HTTP协议的服务器。

随便推点

基于java的健身房管理系统设计与实现_java能查看用户的健身情况的健身管理系统-程序员宅基地

文章浏览阅读1.2k次,点赞4次,收藏18次。基于Java的健身房管理系统性能评估是对系统在特定工作负载下的响应速度和资源利用率进行评估和分析,旨在验证系统是否能够满足用户在实际使用中的性能需求。1、并发性能评估:并发性能是指系统在多用户同时访问的情况下的表现。通过模拟多个用户同时进行操作,评估系统的并发性能。可以观察系统是否能够正确处理并发请求,同时保持较好的响应速度。通过增加并发用户数,可以评估系统的并发处理能力和性能瓶颈。通过性能测试工具和性能监控工具,可以测量系统在不同并发负载下的响应时间、吞吐量和资源利用率。_java能查看用户的健身情况的健身管理系统

Haddop:HA高可用_haddp 高可用-程序员宅基地

文章浏览阅读1.1w次。Hadoop集群的高可用:HDFS的HA和YARN的HA_haddp 高可用

汇编的标志寄存器_flag中psw啥意思-程序员宅基地

文章浏览阅读2k次,点赞3次,收藏18次。它被称为FLAG,也称为PSW (Processor Status Word)。共9个标志。其中有6个状态标志位:OF、SF、ZF、AF、PF、CF,及3个控制标志位DF、IF、TF。PSW在实现IF、FOR这类需要进行条件判断的语句时非常重要。为了能熟练编程,我们需要掌握以下这些细节。(汇编里细节很重要)符号标志S(Sign Flag)。当指令执行结果的高位(字节操作中的D7位或字操作中..._flag中psw啥意思

计算机桌面输入法没有了怎么办,输入法不见了怎么办,小编教你电脑输入法不见了怎么办...-程序员宅基地

文章浏览阅读971次。一般新手在遇到这样的问题之后,会毫不犹豫的选择重启,但是重启之后依然不能解决这个问题,究竟是哪里出了问题呢?桌面输入法不见了是什么原因?该怎么修复电脑输入法不见了呢?下面,小编给大家讲解电脑输入法不见了的处理经验。输入法是电脑常见的一款软件,它可以辅助我们打出自己想写的字,但是有时候我们想要打字时,却发现输入法不见了,那么当你遇到这种情况该怎么办呢?要是你不知道怎么处理的话,就来看看小编为大伙整理..._桌面输入法不见了打不了字怎么办

python输出系统时间到文件_Python获取并输出当前日期时间-程序员宅基地

文章浏览阅读1.1k次。取得当前时间戳import timeprint time.time()格式化时间戳为标准格式print time.strftime('%Y.%m.%d',time.localtime(time.time()))获取30天前的时间(通过加减秒数来获取现在或者未来某个时间点)print time.strftime('%Y.%m.%d',time.localtime(time.time()-259200..._python 输出时间到文档里

Buck电路 (PWM实现与闭环反馈) 电力系统仿真_buck电路带反馈控制-程序员宅基地

文章浏览阅读962次,点赞2次,收藏11次。Buck电路 (PWM实现与闭环反馈) 电力系统仿真_buck电路带反馈控制