作者刘文涛
转载请注明出处
前言
在iOS开发中,有时候我们会需要用到发送邮件及短信的功能。我们还可以通过发送邮件来接收用户反馈的崩溃通知等等。我用的是iOS原生自带的MFMailComposeViewController来实现的。他不会使程序进入后台,使用模态弹出邮件或短信发送界面。
代码示例
1.发送邮件
使用前需要导入框架:MessageUI.framework
在使用的controller中导入头文件:
#import <MessageUI/MessageUI.h>
实现代理:
<MFMailComposeViewControllerDelegate,MFMessageComposeViewControllerDelegate>
获取用户是否设置了邮箱账户:
if ([MFMailComposeViewController canSendMail]) {
// 用户已设置邮件账户
[self sendEmailAction]; // 调用发送邮件的代码
}else{
NSLog(@"用户未设置邮箱账户");
}
sendEmailAction方法代码:
- (void)sendEmailAction
{
// 邮件服务器
MFMailComposeViewController *mailCompose = [[MFMailComposeViewController alloc] init];
// 设置邮件代理
[mailCompose setMailComposeDelegate:self];
// 设置邮件主题
[mailCompose setSubject:@"我是邮件主题"];
// 设置收件人
[mailCompose setToRecipients:@[@"邮箱号码"]];
// 设置抄送人
[mailCompose setCcRecipients:@[@"邮箱号码"]];
// 设置密抄送
[mailCompose setBccRecipients:@[@"邮箱号码"]];
/**
* 设置邮件的正文内容
*/
NSString *emailContent = @"邮件内容...";
// 是否为HTML格式
[mailCompose setMessageBody:emailContent isHTML:NO];
// 如使用HTML格式,则为以下代码
// [mailCompose setMessageBody:@"<html><body><p>Hello</p><p>World!</p></body></html>" isHTML:YES];
/**
* 添加附件
*/
UIImage *image = [UIImage imageNamed:@"image"];
NSData *imageData = UIImagePNGRepresentation(image);
[mailCompose addAttachmentData:imageData mimeType:@"" fileName:@"custom.png"];
NSString *file = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"pdf"];
NSData *pdf = [NSData dataWithContentsOfFile:file];
[mailCompose addAttachmentData:pdf mimeType:@"" fileName:@"pdf文件"];
// 弹出邮件发送视图
[self presentViewController:mailCompose animated:YES completion:nil];
}
````
MFMailComposeViewControllerDelegate的代理方法:
````objc
- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error{
switch (result) {
case MFMailComposeResultCancelled:
NSLog(@"取消发送");
break;
case MFMailComposeResultFailed:
NSLog(@"发送失败");
break;
case MFMailComposeResultSaved:
NSLog(@"保存草稿文件");
break;
case MFMailComposeResultSent:
NSLog(@"发送成功");
break;
default:
break;
}
// 关闭邮件发送视图
[self dismissViewControllerAnimated:YES completion:nil];
}
2.发送短信
获取用户能否发送短信:
if ([MFMessageComposeViewController canSendText]) {
[self sendMessageAction];
}else{
NSLog(@"用户不能发送短信");
}
sendMessageAction方法代码:
// 调用系统API发送短信
- (void)sendMessageAction{
MFMessageComposeViewController *messageVC = [[MFMessageComposeViewController alloc] init];
// 设置短信代理
messageVC.messageComposeDelegate = self;
// 发送给谁
messageVC.recipients = @[@"18701235678"];
// 发送的内容
messageVC.body = @"hello world";
// 弹出发送短信的视图
[self presentViewController:messageVC animated:YES completion:nil];
}
MFMessageComposeViewControllerDelegate的代理方法:
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result{
switch (result) {
case MessageComposeResultCancelled:
NSLog(@"取消发送");
break;
case MessageComposeResultFailed:
NSLog(@"发送失败");
break;
case MessageComposeResultSent:
NSLog(@"发送成功");
break;
default:
break;
}
[self dismissViewControllerAnimated:YES completion:nil];
}
结语
以上代码均在真机(iOS9)进行测试,并通过测试。注意发送邮件的时候需要你绑定邮箱账户。
本文demo。