iOS开发-Email的发送方法
1.openURL
- #pragma mark - 使用系统邮件客户端发送邮件
- -(void)launchMailApp
- {
- NSMutableString *mailUrl = [[[NSMutableString alloc]init]autorelease];
- //添加收件人
- NSArray *toRecipients = [NSArray arrayWithObject: @"first@example.com"];
- [mailUrl appendFormat:@"mailto:%@", [toRecipients componentsJoinedByString:@","]];
- //添加抄送
- NSArray *ccRecipients = [NSArray arrayWithObjects:@"second@example.com", @"third@example.com", nil];
- [mailUrl appendFormat:@"?cc=%@", [ccRecipients componentsJoinedByString:@","]];
- //添加密送
- NSArray *bccRecipients = [NSArray arrayWithObjects:@"fourth@example.com", nil];
- [mailUrl appendFormat:@"&bcc=%@", [bccRecipients componentsJoinedByString:@","]];
- //添加主题
- [mailUrl appendString:@"&subject=my email"];
- //添加邮件内容
- [mailUrl appendString:@"&body=<b>email</b> body!"];
- NSString* email = [mailUrl stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
- [[UIApplication sharedApplication] openURL: [NSURL URLWithString:email]];
- }
缺点很明显,这样的过程会导致程序暂时退出,即使在iOS 4.x支持多任务的情况下,这样的过程还是会让人觉得不是很方便。
2.MFMailComposeViewController
- 1.项目中引入MessageUI.framework;
- 2.在使用的文件中导入MFMailComposeViewController.h头文件;
- 3.实现MFMailComposeViewControllerDelegate,处理邮件发送事件;
- 4.调出邮件发送窗口前先使用MFMailComposeViewController里的“+ (BOOL)canSendMail”方法检查用户是否设置了邮件账户;
- 5.初始化MFMailComposeViewController,构造邮件体
- //
- // ViewController.h
- // MailDemo
- //
- // Created by LUOYL on 12-4-4.
- // Copyright (c) 2012年 http://luoyl.info. All rights reserved.
- //
- #import <UIKit/UIKit.h>
- #import <MessageUI/MFMailComposeViewController.h>
- @interface ViewController : UIViewController<MFMailComposeViewControllerDelegate>
- @end
- #pragma mark - 在应用内发送邮件
- //激活邮件功能
- - (void)sendMailInApp
- {
- Class mailClass = (NSClassFromString(@"MFMailComposeViewController"));
- if (!mailClass) {
- [self alertWithMessage:@"当前系统版本不支持应用内发送邮件功能,您可以使用mailto方法代替"];
- return;
- }
- if (![mailClass canSendMail]) {
- [self alertWithMessage:@"用户没有设置邮件账户"];
- return;
- }
- [self displayMailPicker];
- }
- //调出邮件发送窗口
- - (void)displayMailPicker
- {
- MFMailComposeViewController *mailPicker = [[MFMailComposeViewController alloc] init];
- mailPicker.mailComposeDelegate = self;
- //设置主题
- [mailPicker setSubject: @"eMail主题"];
- //添加收件人
- NSArray *toRecipients = [NSArray arrayWithObject: @"first@example.com"];
- [mailPicker setToRecipients: toRecipients];
- //添加抄送
- NSArray *ccRecipients = [NSArray arrayWithObjects:@"second@example.com", @"third@example.com", nil];
- [mailPicker setCcRecipients:ccRecipients];
- //添加密送
- NSArray *bccRecipients = [NSArray arrayWithObjects:@"fourth@example.com", nil];
- [mailPicker setBccRecipients:bccRecipients];
- // 添加一张图片
- UIImage *addPic = [UIImage imageNamed: @"Icon@2x.png"];
- NSData *imageData = UIImagePNGRepresentation(addPic); // png
- //关于mimeType:http://www.iana.org/assignments/media-types/index.html
- [mailPicker addAttachmentData: imageData mimeType: @"" fileName: @"Icon.png"];
- //添加一个pdf附件
- NSString *file = [self fullBundlePathFromRelativePath:@"高质量C++编程指南.pdf"];
- NSData *pdf = [NSData dataWithContentsOfFile:file];
- [mailPicker addAttachmentData: pdf mimeType: @"" fileName: @"高质量C++编程指南.pdf"];
- NSString *emailBody = @"<font color='red'>eMail</font> 正文";
- [mailPicker setMessageBody:emailBody isHTML:YES];
- [self presentModalViewController: mailPicker animated:YES];
- [mailPicker release];
- }
- #pragma mark - 实现 MFMailComposeViewControllerDelegate
- - (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
- {
- //关闭邮件发送窗口
- [self dismissModalViewControllerAnimated:YES];
- NSString *msg;
- switch (result) {
- case MFMailComposeResultCancelled:
- msg = @"用户取消编辑邮件";
- break;
- case MFMailComposeResultSaved:
- msg = @"用户成功保存邮件";
- break;
- case MFMailComposeResultSent:
- msg = @"用户点击发送,将邮件放到队列中,还没发送";
- break;
- case MFMailComposeResultFailed:
- msg = @"用户试图保存或者发送邮件失败";
- break;
- default:
- msg = @"";
- break;
- }
- [self alertWithMessage:msg];
- }
第二种方法的劣势也很明显,iOS系统替我们提供了一个mail中的UI,而我们却完全无法对齐进行订制,这会让那些定制化成自己风格的App望而却步,因为这样使用的话无疑太突兀了。
3、我们可以根据自己的UI设计需求来定制相应的视图以适应整体的设计。可以使用比较有名的开源SMTP协议来实现。
https://github.com/jetseven/skpsmtpmessage
在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开发-Email的发送方法相关推荐
- iOS开发中常用的方法
iOS开发中常用的方法 系统弹窗: 过期方法: UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"确认报价" ...
- iOS开发使用半透明模糊效果方法整理
转载:http://www.cocoachina.com/ios/20141223/10731.html 虽然iOS很早就支持使用模糊效果对图片等进行处理,但尤其在iOS7以后,半透明模糊效果得到大范 ...
- [转]iOS开发使用半透明模糊效果方法整理
转自:http://www.molotang.com/articles/1921.html 虽然iOS很早就支持使用模糊效果对图片等进行处理,但尤其在iOS7以后,半透明模糊效果得到大范围广泛使用.包 ...
- iOS开发之邮件发送代码
[java] view plaincopy 检测设备是否支持邮件发送功能 Class mailClass = (NSClassFromString(@"MFMailComposeViewCo ...
- IOS开发之----常用加密方法
本文转载至 http://blog.csdn.net/wildfireli/article/details/23191983 (AES.MD5.Base64) 分类: iPhone 2014-04-0 ...
- iOS开发 ☞ 那些最熟悉的陌生方法
原文链接:http://blog.csdn.net/magicZYJ/article/details/51873894 1.addSubview 当我们调用 [superView addSubview ...
- iOS开发-UIColor转UIIamge方法
只能说太神奇了,完美应用到我的毕业设计 - (UIImage*) createImageWithColor: (UIColor*) color {CGRect rect=CGRectMake(0,0, ...
- iOS开发 NSPredicate的使用方法
1. 概念 1. 谓词(NSPredicate)是什么? Xcode的开发者文档中的解释: A definition of logical conditions used to constrain a ...
- IOS开发-Nsstring中搜索方法rangeOfString
NSString *str1 = @"can you \n speak English"; NSString *str = @"\n"; //在str1这个字符 ...
最新文章
- Android之旅---Service
- -f shell 模糊匹配_生产力工具:shell 与 Bash 脚本
- Java黑皮书课后题第4章:*4.23(金融应用:酬金)编写一个程序,读取下面信息,然后输出一个酬金声明
- Linux 命令之 sed -- 功能强大的流式文本编辑器
- 密码学基本概念(一)
- linux 开放5222端口,ejabberd 安装配置
- 操作系统原理 —— 操作系统概述
- 使用Tslib在触摸屏上显示汉字
- leetcode [78] Subsets
- HDU2089 不要62【数位DP+记忆化搜索】
- python画蜡烛致敬烈士_Python量化交易-绘制蜡烛图 !这个图不像你的钱哦!
- python常用数据结构及算法_常用数据结构和算法汇总
- matlab着重标出某个点,MATLAB与数学实验讲义资料.doc
- 设计模式之Bridge模式(桥接模式)
- 组装台式计算机的部件,组装台式电脑各配件的简单介绍
- python无法打开_终端里为什么无法运行python?
- aspen如何确定塔板数_Aspen中有关回流比、塔板数、进料板位置等灵敏度分析作用...
- CS5265方案应用|TYPEC投屏方案| Type-C转HDMI4K60HZ转换方案
- 爱普生打印机在计算机上的地址,爱普生打印机怎么使用 爱普生打印机使用方法【详解】...
- python和大数据有什么关系
热门文章
- Oracle增加表分区
- iphone开发教程(1) iOS大纲
- 菜单箭头旋转180度
- html 滚动条置顶,css怎么设置网页下拉条(滚动条)样式?
- 这个gayhub的大佬作者,更新起ChatGPT的项目,简直是高产如奶牛呐!实战网页版chatgpt-web源码(上)
- 【已解决】使用pip安装包提示TLS证书错误解决办法
- 告别GIF,使用Jetpack Compose打造可爱的天气动画
- 从根上理解高性能、高并发(二):深入操作系统,理解I/O与零拷贝技术
- python排列组合结果输出_排列组合总结:将结果进行输出的实现方法
- Degenerate dimensions (退化的维)