一、邮件分享

1、iOS系统自带邮件设置邮箱(此处以QQ邮箱为例)(http://jingyan.baidu.com/album/6181c3e084cb7d152ef153b5.html?picindex=1)

  注意:由于QQ邮箱激活时间不满14天,暂时无法设置POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务

     会造成只能发送邮件,但是邮件接收不到的情况。

2、实现功能

- (void)displayMailComposerSheet
{
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init]; // 设置picker的委托方法,完成之后会自动调用成功或失败的方法
picker.mailComposeDelegate = self;
// 添加主题
[picker setSubject:@"文件分享"];
// 添加收件人
//NSArray *toRecipients = [NSArray arrayWithObject:@"收件人@qq.com"];
// 说明:也可以添加多个收件人,代码如下所示:
// NSArray *toRecipients = [NSArray arrayWithObjects:@"one@qq.com",@"two@qq.com",nil];
// 添加抄送
// NSArray *ccRecipients = [NSArray arrayWithObjects:@"second@qq.com",@"third@qq.com", nil];
// 添加密送
// NSArray *bccRecipients = [NSArray arrayWithObject:@"fourth@qq.com"]; [picker setToRecipients:toRecipients];
// [picker setCcRecipients:ccRecipients];
// [picker setBccRecipients:bccRecipients]; // 直接在HTML代码中写入图片的地址
NSString *emailBody = [NSString stringWithFormat:@"<img src='http://p2.so.qhimg.com/t0130e3288d86929b97.jpg' /><p>我分享了图片</p>"]; [picker setMessageBody:emailBody isHTML:YES];
[self presentModalViewController:picker animated:YES];
[picker release];
}

这样实现的效果是,在邮件中会显示一个图片和一段文本,关键是第25行代码,一定要设置isHTML为YES。但实际应用中,图片一般我们没有上传到服务器上,而是在客户端,这时候我们可以用下面的方式来发送图片(将第23行代码替换成下面的代码):

// 发送图片附件(其他格式的附件,可以都先转化称NSData类型,然后设置相应的mimeType即可,如txt类型为@"text/txt",doc类型为@"text/doc",pdf类型为@"file/pdf"等等)
NSData *myData = [NSData dataWithContentsOfFile:[[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"new.png"]];
[picker addAttachmentData:myData mimeType:@"image/jpeg" fileName:@"new.png"];
NSString *emailBody = [NSString stringWithFormat:@"<p>我分享了图片</p>"];

使用上面这种方式,将isHTML设置为YES的话,图片会显示在正文中;isHTML设置为NO的话,图片会显示在附件中。

》添加邮箱附件方法:

//发送图片附件
//NSString *path = [[NSBundle mainBundle] pathForResource:@"rainy" ofType:@"jpg"];
//NSData *myData = [NSData dataWithContentsOfFile:path];
//[picker addAttachmentData:myData mimeType:@"image/jpeg" fileName:@"rainy.jpg"];
//发送txt文本附件
//NSString *path = [[NSBundle mainBundle] pathForResource:@"MyText" ofType:@"txt"];
//NSData *myData = [NSData dataWithContentsOfFile:path];
//[picker addAttachmentData:myData mimeType:@"text/txt" fileName:@"MyText.txt"];
//发送doc文本附件
//NSString *path = [[NSBundle mainBundle] pathForResource:@"MyText" ofType:@"doc"];
//NSData *myData = [NSData dataWithContentsOfFile:path];
//[picker addAttachmentData:myData mimeType:@"text/doc" fileName:@"MyText.doc"];
//发送pdf文档附件
/*
NSString *path = [[NSBundlemainBundle]pathForResource:@"CodeSigningGuide"ofType:@"pdf"];
NSData *myData = [NSDatadataWithContentsOfFile:path];
[pickeraddAttachmentData:myDatamimeType:@"file/pdf"fileName:@"rainy.pdf"];
*/

邮件发送完成之后,可以在如下的委托方法中进行相应的处理,委托方法如下所示:

- (void)mailComposeController:(MFMailComposeViewController*)controller
didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
switch (result)
{
case MFMailComposeResultCancelled:
NSLog(@"Result: Mail sending canceled"); // 邮件发送取消
break;
case MFMailComposeResultSaved:
NSLog(@"Result: Mail saved"); // 邮件保存成功
break;
case MFMailComposeResultSent:
NSLog(@"Result: Mail sent"); // 邮件发送成功
break;
case MFMailComposeResultFailed:
NSLog(@"Result: Mail sending failed"); // 邮件发送失败
break;
default:
NSLog(@"Result: Mail not sent");
break;
}
[self dismissModalViewControllerAnimated:YES];
}

导入MessageUI.framework

.h文件中#import<MessageUI/MessageUI.h>

#import<MessageUI/MFMailComposeViewController.h>

实现 MFMailComposeViewControllerDelegate, MFMessageComposeViewControllerDelegate

二、发送短信

//短信
-(void)showSMSPicker{
Class messageClass = (NSClassFromString(@"MFMessageComposeViewController")); if (messageClass != nil) {
// Check whether the current device is configured for sending SMS messages
if ([messageClass canSendText]) {
[selfdisplaySMSComposerSheet];
}
else {
UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@""message:@"设备不支持短信功能" delegate:selfcancelButtonTitle:@"确定" otherButtonTitles:nil];
[alert show];
[alert release]; }
}
else {
}
} -(void)displaySMSComposerSheet
{
MFMessageComposeViewController *picker = [[MFMessageComposeViewControlleralloc]init];
picker.messageComposeDelegate =self;
NSString *smsBody =[NSStringstringWithFormat:@"我分享了文件给您,地址是%@",address] ;
picker.body=smsBody;
[selfpresentModalViewController:pickeranimated:YES];
[pickerrelease];
}

p.p1 { margin: 0; font: 14px "Lucida Grande"; -webkit-text-stroke: #000000; background-color: rgba(239, 245, 251, 1) }
span.s1 { font-kerning: none }
p.p1 { margin: 0; font: 12px "Lucida Grande"; color: rgba(116, 62, 4, 1); -webkit-text-stroke: #743e04; background-color: rgba(255, 249, 227, 1) }
span.s1 { font-kerning: none }

iOS-调用系统的短信和发送邮件功能,实现短信分享和邮件分享的更多相关文章

  1. ios 调用系统发短信以及打电话功能

    先介绍一种最简单的方法: 调用打电话功能 [[UIApplicationsharedApplication] openURL:[NSURL URLWithString:@"tel://100 ...

  2. iOS - (调用系统本机发送短信功能)

    今天处理一个订单详情的界面,在订单详情页面上有联系方式(电话号码),在电话号码的右边有两图片,一个是电话样式的,一个是短信样式的,做为一名程序员(号称攻城师)一眼看下去就应该是一个 button,而不 ...

  3. ios 调用系统应用的方法 应用间跳转的方法

    声明一个私有方法: #pragma mark - 私有方法 -(void)openUrl:(NSString *)urlStr{ //注意url中包含协议名称,iOS根据协议确定调用哪个应用,例如发送 ...

  4. ios调用系统相册、相机 显示中文标题、本地化多语言支持

    因为调用系统相册.相机需要显示中文,所以搞了半天才知道是在Project->info->Custom ios Target Properties 添加 Localizations 并加入C ...

  5. iOS调用系统通讯录获取姓名电话号码(转)

    原文地址:http://blog.csdn.net/idoshi201109/article/details/46007125 OS调用系统通讯录获取姓名电话号码 (iOS 8.0 Xcode6.3可 ...

  6. iOS 调用系统拍照遇到的坑

    iOS 11之前用的一套图片选择器框架,之前一直没问题,iOS11之后拍照后回调失败......,打断点方法完全执行,也能回调成功:但是去掉断点又恢复不能会调的问题.困扰了一下午,愣是没有解决.后来把 ...

  7. iOS - (调用系统本机打电话功能)

    如下图所示,点击订单里的打电话 button 后,调用系统的打电话功能. 这个调用系统打电话功能有点简单,不需要遵守协议和代理什么的,直接在点击方法里写上几句代码就可以了. 下面来看看代码吧: 接下来 ...

  8. iOS调用系统声音与振动

    如何调用系统声音?[iphone 调用系统铃声与震动功能] 首先要在工程里加入Audio Toolbox framework这个库,然后在需要调用的文件里#import <AudioToolbo ...

  9. ios调用系统界面显示英文

    调用系统相册界面 UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.sourceType ...

随机推荐

  1. pycharm安装指导教程

    pycharm下载安装教程 1.pycharm下载官网 http://www.jetbrains.com/pycharm/ 2.下载好安装包后双击点开安装包文件,这边以专业版为例 按以上图片所示教程, ...

  2. 【Go语言学习笔记】hello world

    书接上回,上回说到了为什么要学习Go语言,今天我们来实际写一下,感受一下Go语言的精美之处. 环境搭建 安装和设置 Windows: Go安装包下载网址:https://golang.org/dl/ ...

  3. c++ 算法 next_permutation

    遇到这个算法是在大牛写的10行的8皇后问题中,下面首先给出这个10行就解决了8皇后的NB代码,我目前还是没有看懂对于皇后不在同一列的判断,因为他巧妙的用了移位操作. #include<iostr ...

  4. robot_framewok自动化测试--(4)常用关键字介绍

    常用关键字介绍 在学习一门编程语言的时候,大多教材都是从打印"hello world"开始.我们可以像编程语言一样来学习 Robot Framework.虽然通过 RIDE 提供& ...

  5. 【Java】IO流

    File类 介绍 File类的一个对象,代表一个文件或一个文件目录 File类声明在java.io包下 File类中涉及关于文件或文件目录的创建.删除.重命名.修改时间.文件大小等方法,并未涉及到写入 ...

  6. PTA 是否二叉搜索树 (25分)

    PTA 是否二叉搜索树 (25分) 本题要求实现函数,判断给定二叉树是否二叉搜索树. 函数接口定义: bool IsBST ( BinTree T ); 其中BinTree结构定义如下: typede ...

  7. JDK 之 Arrays.asList - 源码分析

    Arrays工具类提供了一个方法asList, 使用该方法可以将一个变长参数或者数组转换成List . 其源代码如下: @SafeVarargs public static <T> Lis ...

  8. 菜鸡的Java笔记 - java 常用类库

    CommonClassLibrary 常用类库        定时调度            定时调度指的是每到一个时刻,都会自动的产生某些特定的操作形式                    con ...

  9. 测试平台系列(79) 编写Redis配置功能(下)

    大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持. 欢迎关注我的公众号测试开发坑货,获取最新文章教程! 回顾 上一节我们提出了优化Dao ...

  10. [atARC068F]Solitaire

    对于最终的序列$a_{i}$,条件如下: 1.$a_{i}$是一个排列,且$a_{k}=1$ 2.不存在三元组$1\le x<y<z<k$,使得$a_{x}<a_{y}< ...