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

智能推荐

计算机应用模块数量如何填写,职称计算机考试科目、模块数量介绍-程序员宅基地

文章浏览阅读1.7k次。原标题:职称计算机考试科目、模块数量介绍全国计算机应用能力考试坚持"实事求是,区别对待,逐步提高"的原则,不同地区、不同部门根据本地区、本部门的实际情况,确定适合本地区、本部门的考试范围要求。1、不同地区和部门自主确定应考科目数量在对专业技术人员计算机应用能力的具体要求上,各省、自治区、直辖市人事厅(局)和国务院有关部门干部(人事)部门应结合本地区、本部门的实际情况,确定本地区、本部门在评聘专业技..._模块数

设计一个 shell 程序,添加一个新组为 class1,然后添加属于这个组的 30 个用户,用户名的形式为 stdxx ,其中 xx 从 01 到 30_设计一个shell程序,添加一个新组为class1,然后添加属于这个组的30个用户,用户名的-程序员宅基地

文章浏览阅读5.5k次,点赞3次,收藏49次。Linux例题:设计一个 shell 程序,添加一个新组为 class1,然后添加属于这个组的 30 个用户,用户名的形式为 stdxx ,其中 xx 从 01 到 30_设计一个shell程序,添加一个新组为class1,然后添加属于这个组的30个用户,用户名的

基于51单片机的冰箱温度控制除霜系统Proteus仿真-程序员宅基地

文章浏览阅读481次,点赞24次,收藏12次。AT89C52/AT89C51是一款经典的8位单片机,是意法半导体(STMicroelectronics)公司生产的一系列单片机之一。它基于8051内核,并具有许多与其兼容的特性。主要特点如下:内部存储器:具有8KB的闪存(Flash)存储器,可用于存储用户程序和数据。这些存储器的内容可以通过编程器进行编程和擦除。RAM存储器:配备了256字节的随机存取存储器(RAM),用于暂存数据和程序的变量。

动身吧褪色者,即使引导已经破碎,也请您当上艾尔登之王-程序员宅基地

文章浏览阅读202次。我的第一篇博客,也祝所有学习计算机的兄弟们,前程似锦!

C#压缩指定的文件并生成zip文件-程序员宅基地

文章浏览阅读417次。程序集需要添加的引用是:ICSharpCode.SharpZipLib.dll使用实例: //执行压缩 ClsZip.Zip(downZipPath, sourceTopPath, 1, "", allFilePath); //执行下载 ctrlDcAllGrxx.download(downZi...

Apache学习(一):centos系统安装配置APACHE通解-程序员宅基地

文章浏览阅读85次。为什么80%的码农都做不了架构师?>>> ...

随便推点

c语言函数base,c中base的用法-程序员宅基地

文章浏览阅读1.7k次。c中base的用法的用法你知道吗?下面小编就跟你们详细介绍下c中base的用法的用法,希望对你们有用。c中base的用法的用法如下:1、调用基类中的重名方法[csharp]public class Person{protected string ssn = "444-55-6666";protected string name = "John L. Malgraine";public virtua..._c语言中base=16是什么意思

为什么接口中变量要用final修饰_接口参数都定义为final的作用-程序员宅基地

文章浏览阅读6.7k次,点赞3次,收藏7次。今天碰到这个问题时候,还真不好理解,只知道interface中的变量默认是被public static final 修饰的,接口中的方法是被public和abstrct修饰的。查阅了很多资料,做了些例子,得出以下结论,不足的地方希望大家指出。 Java代码 /* * 关于抽象类和接口 * * 1_接口参数都定义为final的作用

【R语言学习笔记】6、List列表详解_r语言怎么查看list有几个项目-程序员宅基地

文章浏览阅读4.4k次,点赞3次,收藏25次。创建一个list列表> mylist <- list(stud.id = 1234,+ stud.name = "Tom",+ stud.marks = c(12, 3, 14, 25, 19))> mylist$stud.id[1] 1234$stud.name[1] "Tom"$stud.marks[1] 12 3 14 25 19取列表的值注..._r语言怎么查看list有几个项目

java 判断标点符号_Java判断中英文符号、标点的实现-程序员宅基地

文章浏览阅读2.7k次。本文介绍了Java判断中英文符号、标点的实现,分享给大家,具体如下:方法一、用unicodeBlock和unicodeScript判断在Java中,主要使用 Character类处理字符有关功能,而JDK 1.7中Character是按照Unicode 6.0版本实现的,所以这个要先学习下常用的 Unicode编码。其中的UnicodeBlock 和 UnicodeScript类可以帮助我们判断字..._java 判断字符是标点符号

图像缩放算法-程序员宅基地

文章浏览阅读2.1k次。怎样计算缩放比例?有四种方法:1.对角线法,以对角线长度为准,其伸长者为放大,缩短者为缩小,其底边并行线即为新尺寸。2.计算器法,先输入欲缩放宽度,按除键,再输入原稿尺寸,再按%即得。3.比例尺法,将比例尺上方设定原稿宽度,与比例尺下方新尺寸对齐,即可直接找出缩放百分比。4.公式法,套入(原稿宽度/原稿高度═新宽度/新..._图像缩放算法

word创建自动标序号的标题列表_word里1234自动生成-程序员宅基地

文章浏览阅读378次。创建如上图的四级列表:一、分别基于标题2、3、4(同时也是二三四级样式)创建每个标题的新样式。二、接下来是最后两步完成_word里1234自动生成

推荐文章

热门文章

相关标签