IOS使用mailcore2发送邮件,qq邮箱发送

  • 来源:新网
  • 更新日期:2018-03-13

摘要:1.首先获取mailcore2的代码git clone https://github.com/MailCore/mailcore2/2.将下载的代码拷贝到项目文件目录下,打开自己的工程将下载的mailcore2工程文件mailcore2.xcodeproj直接拉到自己的工程下面 下载中的目录为build-mac/mailcore2.xcodeproj3.将静态库添加到工程中

1.首先获取mailcore2的代码

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

t01d1ad5cd525ede08d.jpg

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 = @"xxxxxxxx@qq.com"; _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:@"422301261@qq.com"]; // 发送人 messageBuilder.header.to = @[[MCOAddress addressWithMailbox:@"164792796@qq.com"]]; // 收件人(多人) // messageBuilder.header.cc = @[[MCOAddress addressWithMailbox:@"@333333qq.com"]]; // 抄送(多人) // messageBuilder.header.bcc = @[[MCOAddress addressWithMailbox:@"444444@qq.com"]]; // 密送(多人) 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.端口号错误。