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

智能推荐

杭电计算机组成实验6(六)MIPS汇编器与模拟器实验_计组 汇编器实验-程序员宅基地

文章浏览阅读3.2k次,点赞4次,收藏8次。实验内容1. 学习 MIPS指令系统,熟悉 MIPS指令格式及其汇编指令助记符,掌握机器指令编码方法2. 学习 MIPS汇编程序设计,学会使用 MIPS 汇编器将汇编语言程序翻译成二进制文件3. 了解使用 MIPS教学系统模拟器运行程序的方法解决方法下载 PCSpim 软件给大家按照书上的要求,在文本编辑器中输入汇编程序,然后装入PCSpim左侧内为指令地址,中间是十六进制的指令编码,右侧是相应的标准汇编指令,主要注意的是第二个程序,必须在裸机执行方式核心 结果展示:..._计组 汇编器实验

Swing中关于JPanel上面添加JLabel时的拖动重影问题_swing jtable自动跳到选中的行 有残影-程序员宅基地

文章浏览阅读104次。swing的重大发现问题_swing jtable自动跳到选中的行 有残影

天猫xpath_xpath 天猫-程序员宅基地

文章浏览阅读121次。### tianmao# 价格//*[@id="J_ItemList"]/div/div/p[1]/em/text()//*[@id="J_ItemList"]/div/div/p[3]/span[1]/em//*[@id="J_ItemList"]/div/@data-id//*[@id="J_ItemList"]/div/div/p[2]/a/@hr..._xpath 天猫

基于springboot校园社团信息管理系统设计与实现—开题-程序员宅基地

文章浏览阅读860次,点赞28次,收藏22次。现如今大学社团各式各样的都有,学校对社团的管理手段处于落后阶段,以致于对社团的未来发展以及社团的活动开展都有一定的影响,导致大学校内社团不能健康的发展,所以有必要建设一个大学社团管理系统来帮助学校管理校内社团,给学校提供一个管理社团更有效的一个手段,通过这样的系统,可以做到对信息的规范管理、科学统计和快速查询,从而减少了管理方面的工作量。在中国对于校园社团的网站其实是很缺少的,校园社团信息管理系统为学校提供一个监管大学社团的平台,为社团提供一个在线收纳社员的平台,为学生提供一个在线选择社团的平台。

MySql(十七)_explain select * from table where type=1。-程序员宅基地

文章浏览阅读164次。MySql164.数据库的三范式是什么?第一范式:强调的是列的原子性,即数据库表的每一列都是不可分割的原子数据项。第二范式:要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性。第三范式:任何非主属性不依赖于其它非主属性。165. 一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 mysql 数据库,又插入了一条数据,此时 id 是几?表类型如果是 MyISAM ,那 id 就是 8。表类型如果是 InnoDB,那 id 就是 6。Inno_explain select * from table where type=1。

【架构实践】架构解耦 Decoupling Architecture_decoupled architecture:-程序员宅基地

文章浏览阅读2.5w次。另一方面,随着对数字化转型和敏捷性的更加关注,项目需要比以前更快地交付,但仍需要与更大的核心系统相互连接,这些系统的变化速度比其数字系统要慢得多。在这种情况下,一个人会有重复的功能(使用上述三种模式中的任何一种),但不是将功能流量定向到特定系统,而是将特定流量或条件流量定向到一个系统,并将剩余流量定向到另一个系统.微服务由不同的团队构建,并依赖于它们之间的交互。因此,这意味着团队之间需要非常密切的合作,以确保规范的设计和构建是正确的,不仅是在设计期间,而且在以后进行更改时也是如此,以避免互操作性问题。_decoupled architecture:

随便推点

【HarmonyOS】HarmonyOS参考资料_harmonyos应用开发者高级认证考试入口-程序员宅基地

文章浏览阅读429次,点赞9次,收藏8次。【资料】【HarmonyOS】HarmonyOS参考资料_harmonyos应用开发者高级认证考试入口

unturned服务器怎么自定义,《Unturned》机房服务器开服方法图文教程-程序员宅基地

文章浏览阅读1.1k次。《Unturned》机房服务器开服方法图文教程2014-08-05 09:39:57来源:贴吧编辑:评论(0)《Unturned》游戏中有些玩家想自己开服,之前给大家介绍了各种开服方法,今天给大家带来更直观的开服方法,一起来看看吧。多种开服方法:点击进入1.在服务器下载安装steam.(登录时建立个新的号来登录)2.用steam下载unturned.3.先运行一次,出现“oops”等崩溃错误 点掉..._unturned3.0怎么开服

RSA加密算法-程序员宅基地

文章浏览阅读84次。公钥加密,私钥解密,称为RSA加密算法。私钥加密,公钥解密,称为RSA签名算法。

C语言指针详解(函数指针)_c函数指针-程序员宅基地

文章浏览阅读1.3k次,点赞20次,收藏27次。函数指针说白了也是一个指针,指针中所保存的地址中的内容是一个函数,同之前说过的数组指针相似,函数指针的定义便是返回类型 (* 指针名) (函数参数) //例如: int (*pa) (intx,iny)同数组指针一样,当定义函数指针的时候,* 需要和指针名打括号相结合,( )的优先级高于 * ,不打括号编译器自动会将 指针名 与( )相结合,如 int * pa (int x,int y) ,这样的话便是一个名为pa的函数,函数参数为 int x,int y,函数的返回类型时 int *_c函数指针

微信小程序 tabbar onshow里方法不触发问题_苹果 tabs onshow 事件未触发-程序员宅基地

文章浏览阅读1w次。 不知道是不是tabbar有这种情况,在tabbar里定义类似不会被触发。检查了一圈发现, 好像只有在onload里引用过的同名方法,才会在onshow里被触发到。 不知道具体原因是不是这个, 反正我这么做了之后onshow里是可以调用到的了。。..._苹果 tabs onshow 事件未触发

补码的乘法运算-程序员宅基地

文章浏览阅读168次。补码的乘法运算