APP 内发送邮件

IOS发送Email的两种方法

分类: IOS发送邮件2012-08-28 12:32 9575人阅读 评论(1) 收藏 举报

emailios加密编程file框架

目录(?)[+]

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: @"[email protected]"];
  7. [mailUrl appendFormat:@"mailto:%@", [toRecipients componentsJoinedByString:@","]];
  8. //添加抄送
  9. NSArray *ccRecipients = [NSArray arrayWithObjects:@"[email protected]", @"[email protected]", nil];
  10. [mailUrl appendFormat:@"?cc=%@", [ccRecipients componentsJoinedByString:@","]];
  11. //添加密送
  12. NSArray *bccRecipients = [NSArray arrayWithObjects:@"[email protected]", 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: @"[email protected]"];
  25. [mailPicker setToRecipients: toRecipients];
  26. //添加抄送
  27. NSArray *ccRecipients = [NSArray arrayWithObjects:@"[email protected]", @"[email protected]", nil];
  28. [mailPicker setCcRecipients:ccRecipients];
  29. //添加密送
  30. NSArray *bccRecipients = [NSArray arrayWithObjects:@"[email protected]", nil];
  31. [mailPicker setBccRecipients:bccRecipients];
  32. // 添加一张图片
  33. UIImage *addPic = [UIImage imageNamed: @"[email protected]"];
  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. }
时间: 2024-08-06 17:05:54

APP 内发送邮件的相关文章

APP内分享:微信分享到对话框和微信朋友圈回调方式区别

之前在做微信客户端分享的时候,一直没有留意.这次想在回调完成后,来进行某些操作,才发现了这个问题. 对于APP内分享到朋友圈,分享成功后,会自动跳回到APP中,并可以进行相应的回调操作. 但是分享到聊天框中,会有个弹框选择:是否继续留在微信,如果此时用户选择留在微信,即使自己返回到之前的APP中,微信的回调也不会执行.只有在用户选择 返回APP中,才会走回调,所以如果朋友们,有想在回调中要做某些操作的,需要考虑清楚了.

Android 开发框架和App内调试工具

BeeFramework是什么 BeeFramework Android版主要为Android初级开发人员提供一个基于MVC开发模式的APP DEMO,并提供一套APP内调试工具,包括 查看网络数据请求历史 Crash Log列表 真机WIFI环境下模拟2G\3G网络 查看APP性能(内存占用,CPU占用等) 快速开始 什么是MVC MVC是一种软件架构模式,把系统分为模型(Model),视图(View)和控制器(Controller). MVC通过简化软件的复杂度,是程序更加直观,易于复用,扩

苹果开发——App内购以及验证store的收据(一)

原地址:http://zengwu3915.blog.163.com/blog/static/27834897201375105236580?suggestedreading 发了几天时间在网上折腾了几天,终于把App内购给弄好了.分享一下个人经验 一. 在iTunesConnect中创建内购的App,然后为这个App设置一些产品(付费道具等) 打开iTunesConnect网站https://itunesconnect.apple.com/WebObjects/iTunesConnect.wo

App内切换语言

转载请注明出处 http://www.cnblogs.com/cnwutianhao/p/6746981.html 前几天客户提需求,对App增加一个功能,这个功能目前市面上已经很常见,那就是应用内切换语言.啥意思,就是 英.中.法.德.日...语言随意切换. (本案例采用Data-Bingding模式,麻麻再也不用担心我findViewBy不到Id了哈哈,开个玩笑) 先上示例图: 代码实现: 布局文件(Data-Binding模式),很简单就是两行文字 <?xml version="1.

iOS多语言(国际化)开发(跟随系统 + APP内手动设置)

一:跟随系统切换语言 1>创建好项目工程后, 新建一个多语言文件: 2>添加要设置的语言类型: 3>添加成功 细心的朋友可能会发现在English后面写的是3 Files Localized,这是因为英语是系统默认添加的,而且同时为Main.storyboard 和 LaunchScreen.storyboard设置了多语言,我在自己添加的时候没有勾选这两项. 3>使用多语言文件在应用内设置对应语言 "label"="label"; &quo

苹果开发——App内购以及验证store的收据(二)

原地址:http://zengwu3915.blog.163.com/blog/static/2783489720137605156966?suggestedreading 三. 客户端使用StoreKit完成内购 添加Storekit.Framework,编写自己的storeObsever,用于处理交易,代码如下,其中completeTransaction和failedTransaction两个函数是自定义的用来处理交易成功与失败其它的就都是SKPaymentTransactionObserv

用vue做app内嵌页遇到的坑

公司要求用vue做一个微信端的网站,其中还包含一些app的内嵌页.开始的时候没想那么多,就直接用vue-cli搭了一个单页的vue项目,可随着项目越做越大,页面越来越多,问题就开始暴露出来了. 众所周知,单页面程序优点是在页面初始化时加载相应的HTML.JavaScript 和 CSS,一旦页面加载完成了,就不用再做其他的加载和跳转了,极大的提升了页面的流畅性,提供良好的用户体验.那么问题来了,把所有东西都放在初始化的时候做,就造成了页面首次加载需要更长的等待时间.而对于那些作为app内嵌的页面

iOS app内评分

app内评分 导入依赖的框架 #import <StoreKit/StoreKit.h> // app内评分 - (void)presentStoreProductVC { SKStoreProductViewController *storeProductViewContorller = [[SKStoreProductViewController alloc] init]; storeProductViewContorller.delegate = self; [storeProductV

app内购提示,您已购买此商品,但为下载

出现这样的问题,是支付没有finish造成的,一般在支付过程中断网了,下次再购买同一商品的时候就会出现这样的问题, 解决办法,在点击购买的时候判断支付队列中是否有为finish的商品,若有,则进行处理之后将其finish NSArray* transactions = [SKPaymentQueue defaultQueue].transactions; if (transactions.count > 0) { //检测是否有未完成的交易 SKPaymentTransaction* trans