距离上一次发表文章时,说不清有多久了。
不多说,先上主题,因为项目有发邮件的需求,因而需要跳往原生的邮件app来发送邮件。在网上搜索到有3种方法,其中有两种是原生方法,另外一种为第三方方法,但原生方法中都各有裨益,现在列出下面3种方法,以及它们的优劣势。
1、使用openURL发送邮件
// 主题
NSString *subject = @"Message subject";
// 邮件内容
// NSString *body = @"Message body";
// 收件人
NSString *address = @"test1@akosma.com";
// 抄送
NSString *cc = @"test2@akosma.com";
NSString *path = [NSString stringWithFormat:@"mailto:%@?cc=%@&subject=%@", address, cc, subject];
NSURL *url = [NSURL URLWithString:[path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[[UIApplication sharedApplication] openURL:url];
总结:此方法的优势在于无论用户是否已经登录邮箱,都会跳往邮件app让用户先登录,再发送邮件;而劣势就是已经打开的app会处于后台,需要用户再次进入。
2、使用MFMailComposeViewController发送邮件
使用前注意:
1)项目需要导入框架:MessageUI.framework
2)使用的Controlelr里导入头文件:#import <MessageUI/MessageUI.h>
// 邮件服务器
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:@"瞬间学会发送邮件"];
// 弹出邮件发送视图
[self presentViewController:mailCompose animated:YES completion:nil];
在发送之前需要验证用户是否已经登录
if ([MFMailComposeViewController canSendMail]) { // 用户已设置邮件账户
[self sendEmailAction]; // 调用发送邮件的代码
}
// MFMailComposeViewControllerDelegate的代理方法:
- (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];
}
总结:优势在于发邮件时以模态窗口打开页面以供用户发送,劣势在于需要用户先在邮件app中登录,才能发邮件,否则不可以打开此发送页面
3、使用第三方库SKPSMTPMessage发送邮件
具体参考SKPSMTPMessage第三方库
另外这里涉及到了跳往系统app,所需要用到的方法是openUrl;比如说
ps:
// 跳往safri
NSString *stringURL = @"http://wiki.akosma.com/";
NSURL *url = [NSURL URLWithString:stringURL];
[[UIApplication sharedApplication] openURL:url];
// 跳转至appstore
// NSString *stringURL = @"http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=294409923&mt=8";
NSString *stringURL = @"http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware";
NSURL *url = [NSURL URLWithString:stringURL];
[[UIApplication sharedApplication] openURL:url];
网友评论