发短信 MFMessageComposeViewControll
今天整理了一下发短信和发邮件的方法。整理如下
短信方法一
//直接跳转到系统的邮件客户端,发完邮件后不能回到原应用
NSURL *url = [NSURL URLWithString:@"mailto://123456@qq.com"];
[[UIApplication sharedApplication] openURL:url];
短信方法二:使用了iOS4.0之后提供的MFMessageComposeViewController。
MFMessageComposeViewController 提供了发送短信页面,不需要自己定制。使用的时候先倒入头文件<MessageUI/MessageUI.h>,然后设置并服从代理messageComposeDelegate(注意代理名字)。注意使用canSendText检查设备是否支持发送短信。操作完成之后可以返回原应用
if ([MFMessageComposeViewController canSendText]) {
MFMessageComposeViewController *VC = [[MFMessageComposeViewController alloc] init];
//设置短信内容
VC.body = @"测试信息发布。。。";
//设置收件人列表
VC.recipients = @[@"10086"];
//设置代理
VC.messageComposeDelegate = self;//注意代理名字
[self presentViewController:VC animated:YES completion:nil];
}else {
NSLog(@"不支持");
}
实现MFMessageComposeViewControllerDelegate代理方法
#pragma mark -- MFMessageComposeViewControllerDelegate 短信代理
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result {
switch (result) {
case 0:// 取消
{
NSLog(@"取消发送");
}
break;
case 1:// 成功
{
NSLog(@"发生成功");
}
break;
case 2:// 失败
{
NSLog(@"发送失败");
}
break;
default:
break;
}
//不管成功还是失败,收回短信VC
[controller dismissViewControllerAnimated:YES completion:nil];
}
发邮件方法一
用openURL方法跳转到系统的邮件客户端,没有定制发送内容、标题、附件、图片等,发完邮件后不能回到原应用。
NSURL *url = [NSURL URLWithString:@"mailto://123456@qq.com"];
[[UIApplication sharedApplication] openURL:url];
发邮件方法二
还是用openURL方法跳转到邮件客户端,此方法可以附加上收件人、抄送、密送、邮件主题、内容等功能。不过操作完成之后还是不能回到原应用。
邮件二//直接跳转到系统的邮件客户端,之后不能回到原应用,比较复杂
NSMutableString *urlStr = [[NSMutableString alloc]init];
//添加收件人
NSArray *toRecipients = [NSArray arrayWithObject: @"first@example.com"];
[urlStr appendFormat:@"mailto:%@", [toRecipients componentsJoinedByString:@","]];
//添加抄送
NSArray *ccRecipients = [NSArray arrayWithObjects:@"second@example.com", @"third@example.com", nil];
[urlStr appendFormat:@"?cc=%@", [ccRecipients componentsJoinedByString:@","]];
//添加密送
NSArray *bccRecipients = [NSArray arrayWithObjects:@"fourth@example.com", nil];
[urlStr appendFormat:@"&bcc=%@", [bccRecipients componentsJoinedByString:@","]];
//添加主题
[urlStr appendString:@"&subject=my email"];
//添加邮件内容
[urlStr appendString:@"&body=email body!"];
NSString* email = [urlStr stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL: [NSURL URLWithString:email]];
发邮件方法三:使用MFMailComposeViewController
MFMailComposeViewController和发短信的有点类似,也是提供的有界面,不需要自己定义。使用时首先要引入头文件<MessageUI/MessageUI.h>,然后开始使用MFMailComposeViewController控制器,记得设置代理和服从代理,代理名称mailComposeDelegate。用canSendMail检查设备是否支持发送邮件。
邮件三if ([MFMailComposeViewController canSendMail]) {
MFMailComposeViewController *VC = [[MFMailComposeViewController alloc] init];
//注意代理名字
VC.mailComposeDelegate = self;
//邮件主题
[VC setSubject:@"邮件标题"];
//添加收件人
[VC setToRecipients:@[@"1@qq.com"]];
//添加抄送
[VC setCcRecipients:@[@"2@qq.com"]];
//添加密送
[VC setBccRecipients:@[@"3@qq.com"]];
//添加邮件内容 isHTML:是否以html格式展示文本
[VC setMessageBody:@"此处为<font color='red'>邮件</font>的正文" isHTML:YES];
//添加图片
UIImage *image = [UIImage imageNamed:@"123.png"];
NSData *imageData = UIImagePNGRepresentation(image);
[VC addAttachmentData:imageData mimeType:@"" fileName:@"无所谓.png"];
//添加附件
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"ECT4" ofType:@"txt"];
NSData *fileData = [NSData dataWithContentsOfFile:filePath];
[VC addAttachmentData:fileData mimeType:@"" fileName:@"附件.txt"];
[self presentViewController:VC animated:YES completion:nil];
}else {
//如果跳转到了这一步,把真机上的系统自带邮件客户端配置一下,配置完记得重启手机。
NSLog(@"用户没有设置邮件账户");
}
可以发现MFMailComposeViewController可以添加照片和附件,比较方便。
针对发短信和发邮件功能,本文推荐分别使用MFMessageComposeViewController方法和MFMailComposeViewController方法。
另:openURL: 此方法在iOS10中废弃。代替方法在上一篇中有写。
项目地址:https://pan.baidu.com/s/1kVBuRsj