IOS系统框架提供的两种发送Email的方法:openURL 和 MFMailComposeViewController。借助这两个方法,我们可以轻松的在应用里加入如用户反馈这类需要发送邮件的功能。

1.openURL

使用openURL调用系统邮箱客户端是我们在IOS3.0以下实现发邮件功能的主要手段。我们可以通过设置url里的相关参数来指定邮件的内容,不过其缺点很明显,这样的过程会导致程序暂时退出。下面是使用openURL来发邮件的一个小例子:
  1. #pragma mark - 使用系统邮件客户端发送邮件
  2. -(void)launchMailApp
  3. {
  4. NSMutableString *mailUrl = [[[NSMutableString alloc]init]autorelease];
  5. //添加收件人
  6. NSArray *toRecipients = [NSArray arrayWithObject: @"first@example.com"];
  7. [mailUrl appendFormat:@"mailto:%@", [toRecipients componentsJoinedByString:@","]];
  8. //添加抄送
  9. NSArray *ccRecipients = [NSArray arrayWithObjects:@"second@example.com", @"third@example.com", nil];
  10. [mailUrl appendFormat:@"?cc=%@", [ccRecipients componentsJoinedByString:@","]];
  11. //添加密送
  12. NSArray *bccRecipients = [NSArray arrayWithObjects:@"fourth@example.com", nil];
  13. [mailUrl appendFormat:@"&bcc=%@", [bccRecipients componentsJoinedByString:@","]];
  14. //添加主题
  15. [mailUrl appendString:@"&subject=my email"];
  16. //添加邮件内容
  17. [mailUrl appendString:@"&body=<b>email</b> body!"];
  18. NSString* email = [mailUrl stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
  19. [[UIApplication sharedApplication] openURL: [NSURL URLWithString:email]];
  20. }

2.MFMailComposeViewController

MFMailComposeViewController是在IOS3.0新增的一个接口,它在MessageUI.framework中。通过调用MFMailComposeViewController,可以把邮件发送窗口集成到我们的应用里,发送邮件就不需要退出程序了。MFMailComposeViewController的使用方法:
  • 1.项目中引入MessageUI.framework;
  • 2.在使用的文件中导入MFMailComposeViewController.h头文件;
  • 3.实现MFMailComposeViewControllerDelegate,处理邮件发送事件;
  • 4.调出邮件发送窗口前先使用MFMailComposeViewController里的“+ (BOOL)canSendMail”方法检查用户是否设置了邮件账户;
  • 5.初始化MFMailComposeViewController,构造邮件体
  1. //
  2. //  ViewController.h
  3. //  MailDemo
  4. //
  5. //  Created by LUOYL on 12-4-4.
  6. //  Copyright (c) 2012年 http://luoyl.info. All rights reserved.
  7. //
  8. #import <UIKit/UIKit.h>
  9. #import <MessageUI/MFMailComposeViewController.h>
  10. @interface ViewController : UIViewController<MFMailComposeViewControllerDelegate>
  11. @end
 
  1. #pragma mark - 在应用内发送邮件
  2. //激活邮件功能
  3. - (void)sendMailInApp
  4. {
  5. Class mailClass = (NSClassFromString(@"MFMailComposeViewController"));
  6. if (!mailClass) {
  7. [self alertWithMessage:@"当前系统版本不支持应用内发送邮件功能,您可以使用mailto方法代替"];
  8. return;
  9. }
  10. if (![mailClass canSendMail]) {
  11. [self alertWithMessage:@"用户没有设置邮件账户"];
  12. return;
  13. }
  14. [self displayMailPicker];
  15. }
  16. //调出邮件发送窗口
  17. - (void)displayMailPicker
  18. {
  19. MFMailComposeViewController *mailPicker = [[MFMailComposeViewController alloc] init];
  20. mailPicker.mailComposeDelegate = self;
  21. //设置主题
  22. [mailPicker setSubject: @"eMail主题"];
  23. //添加收件人
  24. NSArray *toRecipients = [NSArray arrayWithObject: @"first@example.com"];
  25. [mailPicker setToRecipients: toRecipients];
  26. //添加抄送
  27. NSArray *ccRecipients = [NSArray arrayWithObjects:@"second@example.com", @"third@example.com", nil];
  28. [mailPicker setCcRecipients:ccRecipients];
  29. //添加密送
  30. NSArray *bccRecipients = [NSArray arrayWithObjects:@"fourth@example.com", nil];
  31. [mailPicker setBccRecipients:bccRecipients];
  32. // 添加一张图片
  33. UIImage *addPic = [UIImage imageNamed: @"Icon@2x.png"];
  34. NSData *imageData = UIImagePNGRepresentation(addPic);            // png
  35. //关于mimeType:http://www.iana.org/assignments/media-types/index.html
  36. [mailPicker addAttachmentData: imageData mimeType: @"" fileName: @"Icon.png"];
  37. //添加一个pdf附件
  38. NSString *file = [self fullBundlePathFromRelativePath:@"高质量C++编程指南.pdf"];
  39. NSData *pdf = [NSData dataWithContentsOfFile:file];
  40. [mailPicker addAttachmentData: pdf mimeType: @"" fileName: @"高质量C++编程指南.pdf"];
  41. NSString *emailBody = @"<font color='red'>eMail</font> 正文";
  42. [mailPicker setMessageBody:emailBody isHTML:YES];
  43. [self presentModalViewController: mailPicker animated:YES];
  44. [mailPicker release];
  45. }
  46. #pragma mark - 实现 MFMailComposeViewControllerDelegate
  47. - (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
  48. {
  49. //关闭邮件发送窗口
  50. [self dismissModalViewControllerAnimated:YES];
  51. NSString *msg;
  52. switch (result) {
  53. case MFMailComposeResultCancelled:
  54. msg = @"用户取消编辑邮件";
  55. break;
  56. case MFMailComposeResultSaved:
  57. msg = @"用户成功保存邮件";
  58. break;
  59. case MFMailComposeResultSent:
  60. msg = @"用户点击发送,将邮件放到队列中,还没发送";
  61. break;
  62. case MFMailComposeResultFailed:
  63. msg = @"用户试图保存或者发送邮件失败";
  64. break;
  65. default:
  66. msg = @"";
  67. break;
  68. }
  69. [self alertWithMessage:msg];
  70. }

最新文章

  1. CSV格式数据如何导入MySQL?
  2. ADF_Starting系列9_使用EJB/JPA/JSF通过ADF构建Web应用程序之测试J2EE Container
  3. [转] Python包和类的基本用法
  4. Nmap / NetCat(nc) / 网络安全工具
  5. 少年Vince之遐想
  6. 【Xamarin开发 Android 系列 6】 Android 结构基础(上)
  7. Unity 物体围绕圆周运动
  8. HDOJ 4745 Two Rabbits DP
  9. HDU 3338 Kakuro Extension
  10. Windows Mobile和Wince(Windows Embedded CE)的字符集问题
  11. 通过安全网闸访问MongoDB
  12. SQL Server 数据恢复到指点时间点(完整恢复)
  13. IntelliJ IDEA使用教程(简介)
  14. 12.C# 接口和抽象类的区别
  15. 中间人攻击之ettercap嗅探
  16. Python全栈开发-Day3-Python基础3
  17. 安装的 Linux 软件包有多少?
  18. P1020 导弹拦截 dp 树状数组维护最长升序列
  19. HTML5 filesystem: 网址
  20. linux系统Qt实现简单的任务管理器

热门文章

  1. Java中字符流与字节流的区别
  2. UPDATE---修改表中数据
  3. JVM笔记6:JVM类加载机制
  4. modelsim仿真时让状态机波形显示状态的名字
  5. 学点css基础
  6. 首页的sitecontent地址
  7. 20160408javaweb之JDBC 大二进制和大文件存取
  8. Android Toast 设置到屏幕中间,自定义Toast的实现方法,及其说明
  9. MVC 避免黄页
  10. ASP.NET MVC5总结(四)登陆中常用技术解析之验证码