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. }

IOS发送Email的两种方法的更多相关文章

  1. IOS发送Email的两种方法-备

    1.openURL 使用openURL调用系统邮箱客户端是我们在IOS3.0以下实现发邮件功能的主要手段.我们可以通过设置url里的相关参数来指定邮件的内容,不过其缺点很明显,这样的过程会导致程序暂时 ...

  2. Python 发送 email 的两种方式

    Python发送email的两种方式,分别为使用登录邮件服务器.调用sendmail命令来发送三种方法 Python发送email比较简单,可以通过登录邮件服务来发送,linux下也可以使用调用sen ...

  3. iOS 关于退出键盘两种方法和避免遮挡

    退出键盘: 方法1:不使用代理,直接使用: -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self.textFi ...

  4. Spring 实现发送电子邮件的两种方法

     1.通过xml文件配置主要属性: xml文件:test.xml <bean id="mailSender" class="org.springframewor ...

  5. ios实现倒计时的两种方法

    方法1:使用NSTimer来实现 主要使用的是NSTimer的scheduledTimerWithTimeInterval方法来每1秒执行一次timeFireMethod函数,timeFireMeth ...

  6. Cisco设备IOS的恢复方法 两种方法

    如果不小心把Router或者Switch的IOS删除了,特别是Flash中的IOS和ROM中的Mini IOS都没有了的话,连启动都不行的话,有什么方法恢复它呢?答案是方法不只一种,而是两种.其实是我 ...

  7. 【转】 iOS 两种方法实现左右滑动出现侧边菜单栏 slide view

      原文: http://blog.csdn.net/crayondeng/article/details/9057637 --- 关于评论中,很多网友都是需要这部分的相关源码,其实在我上传的新浪微博 ...

  8. iOS 两种方法实现左右滑动出现侧边菜单栏 slide view

      现在很多的APP中都有slide view,左右滑动出现侧边菜单栏的功能,Weico这个应用就有. 网上有很多第三方的类库实现了这种效果,其实自己代码写的话也是很简单的,下面我将介绍两种方法实现s ...

  9. ios开发——实用技术OC篇》倒计时实现的两种方法

    倒计时实现的两种方法 timeFireMethod函数,timeFireMethod进行倒计时的一些操作,完成时把timer给invalidate掉就ok了,代码如下: secondsCountDow ...

随机推荐

  1. 打开exls表格时报‘向程序发送命令是出现问题’的错误的解决方法

    1.问题现象 打开表格文件时系统报如下错误 2.解决方法 1)按照如下方法找到excel选项,点击进入 2)找到‘忽略使用动态数据交换(DDE)的其它应用程序(O)',去掉复选框种的勾,点击确定,重新 ...

  2. C/C++——二维数组与指针、指针数组、数组指针(行指针)、二级指针的用法

    本文转载自:https://blog.csdn.net/qq_33573235/article/details/79530792 1. 二维数组和指针 要用指针处理二维数组,首先要解决从存储的角度对二 ...

  3. Eloquent中一些其他的create方法

    firstOrCreate/ firstOrNew# 还有两种其它方法,你可以用来通过属性批量赋值创建你的模型:firstOrCreate 和firstOrNew.firstOrCreate 方法将会 ...

  4. leetcode 之Median of Two Sorted Arrays(五)

    找两个排好序的数组的中间值,实际上可以扩展为寻找第k大的数组值. 参考下面的思路,非常的清晰: 代码: double findMedianofTwoSortArrays(int A[], int B[ ...

  5. hdu 5895(矩阵快速幂+欧拉函数)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5895 f(n)=f(n-2)+2*f(n-1) f(n)*f(n-1)=f(n-2)*f(n-1)+2 ...

  6. 双系统卸载linux和装双系统的方法

    卸载linux系统: 因为本人装的是windows和Ubuntu,所以引导程序在linux系统里,linux系统可以引导windows系统,而Windows不能引导linux,所以需要修改引导程序,使 ...

  7. 分子量(UVa1586)

    题目具体描述见:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=830&a ...

  8. [实战]MVC5+EF6+MySql企业网盘实战(12)——新建文件夹和上传文件

    写在前面 之前的上传文件的功能,只能上传到根目录,前两篇文章实现了新建文件夹的功能,则这里对上传文件的功能进行适配. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战] ...

  9. postman自动生成签名

    查看详细图文教程↓ 一.全局变量方式 1. 在全局变量添加key:value分别是autoSign和var sign={toUnicode:function(s){return s.replace(/ ...

  10. Linux内存管理中的slab分配器

    转载自:http://edsionte.com/techblog/archives/4019 Linux内核中基于伙伴算法实现的分区页框分配器适合大块内存的请求,它所分配的内存区是以页框为基本单位的. ...