iOS开发使用邮件功能通常有以下两种方式:
iOS系统框架提供的两种发送Email的方法:openURL 和 MFMailComposeViewController。借助这两个方法,我们可以轻松的在应用里加入如用户反馈这类需要发送邮件的功能。
1.使用openURL
使用openURL调用系统邮箱客户端是我们在IOS3.0以下实现发邮件功能的主要手段。缺点:在发送邮件的过程会导致程序暂时退出应用想自己提供界面让用户输入短信收件人地址、短信内容、主体、附件等短信内容,则可使用
#pragma mark- 发邮件- (IBAction)email:(id)sender {
NSMutableString *mailUrl = [[NSMutableString alloc]init]; //添加收件人 NSArray *toRecipients = [NSArray arrayWithObject: @"10086@qq.com"]; [mailUrl appendFormat:@"mailto:%@", [toRecipients componentsJoinedByString:@","]]; //添加抄送 NSArray *ccRecipients = [NSArray arrayWithObjects:@"one@qq.com", @"two@qq.com", nil]; [mailUrl appendFormat:@"?cc=%@", [ccRecipients componentsJoinedByString:@","]]; //添加密送 NSArray *bccRecipients = [NSArray arrayWithObjects:@"third@qq.com", nil];[mailUrl appendFormat:@"&bcc=%@", [bccRecipients componentsJoinedByString:@","]]; //添加主题 [mailUrl appendString:@"&subject= Hello"]; //添加邮件内容 [mailUrl appendString:@"&body=emailbody!"]; NSString* email = [mailUrl stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; [[UIApplication sharedApplication] openURL: [NSURL URLWithString:email]];
}
2.使用MFMailComposeViewController
MFMailComposeViewController是在IOS3.0新增的一个接口,它在MessageUI.framework中。通过调用MFMailComposeViewController,可以把邮件发送窗口集成到我们的应用里,发送邮件就不需要退出程序了,建议使用。
.项目中引入MessageUI.framework;
.实现MFMailComposeViewControllerDelegate,处理邮件发送事件;
.调出邮件发送窗口前先使用MFMailComposeViewController里的“+ (BOOL)canSendMail”方法检查用户是否设置了邮件账户;
.初始化MFMailComposeViewController,构造邮件体
例子:
#pragma mark - 调用系统邮箱
- (void)sendEmailAction
{
// 邮件服务器
MFMailComposeViewController *mailCompose = [[MFMailComposeViewController alloc] init];
// 设置邮件代理
[mailCompose setMailComposeDelegate:self];
// 设置邮件主题
[mailCompose setSubject:@"Hello"];
// 设置收件人
[mailCompose setToRecipients:@[@"10086@qq.com"]];
// 设置抄送人
[mailCompose setCcRecipients:@[@"邮箱号码"]];
// 设置密抄送
[mailCompose setBccRecipients:@[@"邮箱号码"]];
// 设置邮件的正文内容
NSString *emailContent = @"";
// 是否为HTML格式
[mailCompose setMessageBody:emailContent isHTML:NO];
// 弹出邮件发送视图
[self presentViewController:mailCompose animated:YES completion:nil];
}
#pragma mark - 发送邮件代理方法
- (void)mailComposeController:(MFMailComposeViewController *)controller
didFinishWithResult:(MFMailComposeResult)result
error:(NSError *)error
{
switch (result)
{
case MFMailComposeResultCancelled: // 用户取消编辑
NSLog(@"Mail send canceled...");
break;
case MFMailComposeResultSaved: // 用户保存邮件
NSLog(@"Mail saved...");
break;
case MFMailComposeResultSent: // 用户点击发送
NSLog(@"Mail sent...");
break;
case MFMailComposeResultFailed: // 用户尝试保存或发送邮件失败
NSLog(@"Mail send errored: %@...", [error localizedDescription]);
break;
}
// 关闭邮件发送视图
[self dismissViewControllerAnimated:YES completion:nil];
}