热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

IOS开发中发送e-mail的几种方法总结

这篇文章主要介绍了IOS开发中发送e-mail的几种方法总结的相关资料,需要的朋友可以参考下

iOS系统框架提供的两种发送Email的方法      

1、使用openURL来实现发邮件的功能:   

NSString *url = [NSString stringWithString: @"mailto:foo@example.
com?cc=bar@example.com&subject=Greetings%20from%20Cupertino!&body=Wish%20you%20were%20here!"]; 
[[UIApplication sharedApplication] openURL: [NSURL URLWithString: url]]; 

缺点很明显,这样的过程会导致程序暂时退出,即使在iOS 4.x支持多任务的情况下,这样的过程还是会让人觉得不是很便。   

2、使用MFMailComposeViewController来实现发邮件的功能,它在MessageUI.framework中,你需要在项目中加入该框架,并在使用的文件中导入MFMailComposeViewController.h头文件。 

#import ; 
 
MFMailComposeViewController* cOntroller= [[MFMailComposeViewController alloc] init]; 
controller.mailComposeDelegate = self; 
[controller setSubject:@"My Subject"]; 
[controller setMessageBody:@"Hello there." isHTML:NO]; 
[self presentModalViewController:controller animated:YES]; 
[controller release]; 
//使用该方法实现发送Email是最常规的方法,该方法有相应的MFMailComposeViewControllerDelegate事件: 
 
- (void)mailComposeController:(MFMailComposeViewController*)controller 
   didFinishWithResult:(MFMailComposeResult)result 
      error:(NSError*)error; 
{ 
 if (result == MFMailComposeResultSent) { 
 NSLog(@"It's away!"); 
 } 
 [self dismissModalViewControllerAnimated:YES]; 
} 
//有一些相关的数据结构的定义在头文件中都有具体的描述: 
 
enum MFMailComposeResult { 
 MFMailComposeResultCancelled,//用户取消编辑邮件 
 MFMailComposeResultSaved,//用户成功保存邮件 
 MFMailComposeResultSent,//用户点击发送,将邮件放到队列中 
 MFMailComposeResultFailed//用户试图保存或者发送邮件失败 
}; 
typedef enum MFMailComposeResult MFMailComposeResult; // iOS3.0以上有效 
//在头文件中MFMailComposeViewController的部分方法顺便提及: 
 
+ (BOOL)canSendMail __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0); 
//如果用户没有设置邮件账户,则会返回NO,你可以用根据返回值来决定是使用MFMailComposeViewController 还是 mailto://的传统方法,也或者,你可以选择上文中提到的skpsmtpmessage来实现发送Email的功能。 
- (void)addAttachmentData:(NSData *)attachment mimeType:(NSString *)mimeType fileName:(NSString *)filename; 
//NSData类型的attachment自然不必多说,关于mimeType需要一点说明,官方文档里给出了一个链接http://www.iana.org/assignments/media-types/ ,这里列出的所有的类型都应该支持。关于mimeType的用处,更多需要依靠搜索引擎了 =] 

第二种方法的劣势也很明显,iOS系统替我们提供了一个mail中的UI,而我们却完全无法对齐进行订制,这会让那些定制化成自己风格的App望而却步,因为这样使用的话无疑太突兀了。  

3、我们可以根据自己的UI设计需求来定制相应的视图以适应整体的设计。可以使用比较有名的开源SMTP协议来实现。   

在SKPSMTPMessage类中,并没有对视图进行任何的要求,它提供的都是数据层级的处理,你之需要定义好相应的发送要求就可以实现邮件发送了。至于是以什么样的方式获取这些信息,就可以根据软件的需求来确定交互方式和视图样式了。  

    SKPSMTPMessage *testMsg = [[SKPSMTPMessage alloc] init]; 
  testMsg.fromEmail = @"test@gmail.com"; 
  testMsg.toEmail =@"to@gmail.com"; 
  testMsg.relayHost = @"smtp.gmail.com"; 
  testMsg.requiresAuth = YES; 
  testMsg.login = @"test@gmail.com"; 
  testMsg.pass = @"test"; 
  testMsg.subject = [NSString stringWithCString:"测试" encoding:NSUTF8StringEncoding]; 
  testMsg.bccEmail = @"bcc@gmail.com"; 
  testMsg.wantsSecure = YES; // smtp.gmail.com doesn't work without TLS! 
 
  // Only do this for self-signed certs! 
  // testMsg.validateSSLChain = NO; 
  testMsg.delegate = self; 
 
  NSDictionary *plainPart = [NSDictionary dictionaryWithObjectsAndKeys:@"text/plain",kSKPSMTPPartContentTypeKey, 
         [NSString stringWithCString:"测试正文" encoding:NSUTF8StringEncoding],kSKPSMTPPartMessageKey,@"8bit",kSKPSMTPPartContentTransferEncodingKey,nil]; 
 
   NSString *vcfPath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"vcf"]; 
   NSData *vcfData = [NSData dataWithContentsOfFile:vcfPath]; 
 
   NSDictionary *vcfPart = [NSDictionary dictionaryWithObjectsAndKeys:@"text/directory;\r\n\tx-unix-mode=0644;\r\n\tname=\"test.vcf\"",kSKPSMTPPartContentTypeKey, 
          @"attachment;\r\n\tfilename=\"test.vcf\"",kSKPSMTPPartContentDispositionKey,[vcfData encodeBase64ForData],kSKPSMTPPartMessageKey,@"base64",kSKPSMTPPartContentTransferEncodingKey,nil]; 
 
  testMsg.parts = [NSArray arrayWithObjects:plainPart,vcfPart,nil]; 
 
  [testMsg send]; 
//该类也提供了相应的Delegate方法来让你更好的获知发送的状态. 
 
-(void)messageSent:(SKPSMTPMessage *)message; 
-(void)messageFailed:(SKPSMTPMessage *)message error:(NSError *)error; 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


推荐阅读
  • 最新消息显示,苹果即将发布的新一代iOS系统可能将集成先进的3D地图功能。这一创新技术由C3 Technologies公司开发,曾在今年3月被TechCrunch报道。用户可以通过该功能获得更加真实和沉浸式的地图体验,包括详细的建筑物模型和街景视图。视频演示展示了其卓越的视觉效果和交互性。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 本文将深入探讨 iOS 中的 Grand Central Dispatch (GCD),并介绍如何利用 GCD 进行高效多线程编程。如果你对线程的基本概念还不熟悉,建议先阅读相关基础资料。 ... [详细]
  • 本文介绍了一种支付平台异步风控系统的架构模型,旨在为开发类似系统的工程师提供参考。 ... [详细]
  • 解决SQL Server数据库sa登录名无法连接的问题
    在安装SQL Server数据库后,使用Windows身份验证成功,但使用SQL Server身份验证时遇到问题。本文将介绍如何通过设置sa登录名的密码、启用登录名状态以及开启TCP协议来解决这一问题。 ... [详细]
  • 近期,微信公众平台上的HTML5游戏引起了广泛讨论,预示着HTML5游戏将迎来新的发展机遇。磊友科技的赵霏,作为一名HTML5技术的倡导者,分享了他在微信平台上开发HTML5游戏的经验和见解。 ... [详细]
  • 自动验证时页面显示问题的解决方法
    在使用自动验证功能时,页面未能正确显示错误信息。通过使用 `dump($info->getError())` 可以帮助诊断和解决问题。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • Framework7:构建跨平台移动应用的高效框架
    Framework7 是一个开源免费的框架,适用于开发混合移动应用(原生与HTML混合)或iOS&Android风格的Web应用。此外,它还可以作为原型开发工具,帮助开发者快速创建应用原型。 ... [详细]
  • 本文介绍了如何使用 CMD 批处理脚本进行文件操作,包括将指定目录下的 PHP 文件重命名为 HTML 文件,并将这些文件复制到另一个目录。 ... [详细]
  • 本文详细介绍了DMA控制器如何通过映射表处理来自外设的请求,包括映射表的设计和实现方法。 ... [详细]
  • iPhone 11的几大痛点与小聪明:苹果的精明策略分析
    面对一个直截了当的问题:新款iPhone 11没有5G功能,你会购买吗?在这一年里,苹果面临了自初代iPhone发布以来最尴尬的业绩挑战。尽管iPhone在过去十年中持续热销,推动苹果成为全球市值最高的公司之一,但苹果现在正通过大力拓展服务业务来应对这一困境。此外,苹果还采取了一系列精明的策略,如优化成本控制和提升用户体验,以保持其市场竞争力。 ... [详细]
  • 对于希望在未越狱的iOS设备上修改Hosts文件的苹果用户来说,了解文件的具体位置和操作步骤至关重要。本文将详细介绍如何通过安装最新版本的iTunes来实现这一目标,并提供实用的操作指南,帮助用户轻松完成Hosts文件的编辑。 ... [详细]
  • Apple Watch心电图功能或将在欧洲地区推出
    据最新消息,苹果公司计划在欧洲地区推出Apple Watch的心电图(ECG)功能。这一功能最早于2018年12月通过iOS 5.1.2系统更新在Apple Watch Series 4上实现,使其具备了医疗级心电图监测能力。该功能能够帮助用户实时监测心脏健康状况,及时发现潜在的心律不齐等问题,进一步提升用户的健康管理体验。 ... [详细]
  • 解决启动时遇到 'NTLDR is Missing' 错误
    本文详细介绍了如何解决 Windows XP 系统启动时出现的 'NTLDR is Missing' 错误,提供了多种修复方法。 ... [详细]
author-avatar
欧美盛
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有