需要引入框架:

MessageUI.framework

布局如下:

短信和邮件:

#import "ViewController.h"
#import <MessageUI/MessageUI.h>

@interface ViewController ()<MFMessageComposeViewControllerDelegate,MFMailComposeViewControllerDelegate>//遵循协议

@end

@implementation ViewController

短信功能:

//短信功能
- (IBAction)messageButtonAction:(UIButton *)sender {
#pragma mark 程序外发送短信

    /*
    //定义打开短信的url, 关键字: sms:
    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"sms://%@",@"10086"]];
    //判断程序是否可以调用打开短信功能
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        [[UIApplication sharedApplication] openURL:url];
    }else{
        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示" message:@"您的设备不支持此短信功能" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
        [alert show];
    }
     */
/*
 用openURL来打开程序中的短信功能, 需要用到关键字: "sms:", 后面加上要发送的电话就可以了;
 缺点:1.这个方法会跳出我们正在运行的程序,打开系统的短信界面, 但当用户关闭短信后, 无法回到程序.
     2.这个方法我们只能定义要发送的手机号, 无法编辑发送的短信内容;

 */
    }

#pragma mark 程序内发送短信

/*

为了弥补上述的两个方法的不足,需要另一种使用短信功能的方法:程序内使用短信功能.

*/

//1.添加短信所需要的框架: MessageUI.framework

//2.引入头文件,实现如下代码

//3.判断是否可以发短信

- (IBAction)messageButtonAction:(UIButton *)sender {
#pragma mark 程序外发送短信
  BOOL canSendMessage = [MFMessageComposeViewController canSendText];
    if (canSendMessage) {
        //创建短信视图控制器
        MFMessageComposeViewController *messageVC = [[MFMessageComposeViewController alloc]init];
        //设置代理
        messageVC.messageComposeDelegate = self;

        //设置短信内容
        messageVC.body = @"来一条信息";

        //设置电话, 是一个数组, 可以设置多个电话, 实现群发功能
        messageVC.recipients = @[@"10086",@"10010"];

        //打开短信功能, 通过这个方法会在程序内打开一个短信界面;

        [self presentViewController:messageVC animated:YES completion:nil];

    }else{
        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示" message:@"您的设备不支持此短信功能" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
        [alert show];
    }

}

信息的代理方法:

- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result{

    //MessageComposeResult 的枚举值:
//    MessageComposeResultCancelled, //取消发送短信功能
//    MessageComposeResultSent,     //发送短信
//    MessageComposeResultFailed    //发送失败
    if (result == MessageComposeResultCancelled || result == MessageComposeResultSent) {
        [self dismissViewControllerAnimated:YES completion:nil];
    }

}

邮件功能:

//邮件功能
- (IBAction)mailButtonAction:(UIButton *)sender {
#pragma mark 程序外发送邮件

    /*
    //打开系统邮件页面, mailto:
    NSURL *mailURL = [NSURL URLWithString:[NSString stringWithFormat:@"mailto:%@",@"13683799303@163.com"]];
    //cc:抄送对象  subject:主题  body:内容
    //NSURL *mailURL2 = [NSURL URLWithString:[NSString stringWithFormat:@"mailto:%@?cc = %@&subject = %@&body = %@",@"13683799303@163.com",@"13683799303@26.com",@"邮件",@"你好啊!"]];

    if ([[UIApplication sharedApplication] canOpenURL:mailURL]) {
        [[UIApplication sharedApplication] openURL:mailURL];
    }else{

        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示" message:@"您的设备不支持邮件功能" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
        [alert show];

    }
     */
    /*
     此方法来发送邮件同上述短信一样,也会跳出程序,调用系统的邮件界面;
     */

#pragma mark 程序内发送邮件

    //判断是否可以发送邮件
    BOOL canSendMail = [MFMailComposeViewController canSendMail];
    if (canSendMail) {
        //创建邮件视图控制器
        MFMailComposeViewController *mailVC = [[MFMailComposeViewController alloc]init];
        //设置接收邮件人, 数组,可以实现群发
        [mailVC setToRecipients:@[@"13683799303@163.com",@"135895587@qq.com"]];

        //设置抄送对象,
        [mailVC setCcRecipients:@[@"13683799303@163.com",@"135895587@qq.com"]];

        //设置密送
        [mailVC setBccRecipients:@[@"13683799303@163.com"]];

        //设置内容
        [mailVC setMessageBody:@"很高兴认识你" isHTML:NO];

        //设置代理
        mailVC.mailComposeDelegate = self;
        //打开邮件功能
        [self presentViewController:mailVC animated:YES completion:nil];
    }else{
        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示" message:@"您的设备不支持邮件功能" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
        [alert show];

    }

}

邮件代理的方法:

- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error{
    //    MFMailComposeResultCancelled,  取消发送
    //    MFMailComposeResultSaved,      保存
    //    MFMailComposeResultSent,       发送
    //    MFMailComposeResultFailed      发送失败

    switch (result) {
        case MFMailComposeResultCancelled:
            NSLog(@"取消发送");
            break;
        case MFMailComposeResultSaved:
            NSLog(@"保存");
            break;
        case MFMailComposeResultSent:
            NSLog(@"发送成功");
            break;
        case MFMailComposeResultFailed:
            NSLog(@"失败");
            break;

        default:
            break;
    }

    [self dismissViewControllerAnimated:YES completion:nil];

}

最终效果:(由于模拟器没法演示发送短信,所以会出现下面的现象)

每日更新关注:http://weibo.com/hanjunqiang 
新浪微博

iOS中发送短信/发送邮件的实现 韩俊强的博客的更多相关文章

  1. iOS中 支付宝钱包详解/第三方支付 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博! iOS开发者交流QQ群: 446310206 一.在app中成功完成支付宝支付的过程 1.申请支付宝钱包.参考网址 ...

  2. iOS中 支付宝钱包具体解释/第三方支付 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博! iOS开发人员交流QQ群: 446310206 一.在app中成功完毕支付宝支付的过程 1.申请支付宝钱包.參考网 ...

  3. iOS中 项目开发易错知识点总结 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博! 点击return取消textView 的响应者 - (BOOL)textFieldShouldReturn:(UI ...

  4. HTML5中 HTML列表/块/布局 韩俊强的博客

    从简单到复杂HTML5详解:每日更新关注:http://weibo.com/hanjunqiang  新浪微博! 1.HTML列表 1.有序 2.无序 3.有序star属性 4.有序无序列表 代码: ...

  5. iOS中 HTTP/Socket/TCP/IP通信协议具体解释 韩俊强的博客

    简介: // OSI(开放式系统互联), 由ISO(国际化标准组织)制定 // 1. 应用层 // 2. 表示层 // 3. 会话层 // 4. 传输层 // 5. 网络层 // 6. 数据链接层 / ...

  6. iOS中 扫描二维码/生成二维码详解 韩俊强的博客

    最近大家总是问我有没有关于二维码的demo,为了满足大家的需求,特此研究了一番,希望能帮到大家! 每日更新关注:http://weibo.com/hanjunqiang  新浪微博 指示根视图: se ...

  7. iOS中 HTTP/Socket/TCP/IP通信协议详解 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博 简单介绍: // OSI(开放式系统互联), 由ISO(国际化标准组织)制定 // 1. 应用层 // 2. 表示层 ...

  8. iOS中 扫描二维码/生成二维码具体解释 韩俊强的博客

    近期大家总是问我有没有关于二维码的demo,为了满足大家的需求,特此研究了一番,希望能帮到大家! 每日更新关注:http://weibo.com/hanjunqiang  新浪微博 指示根视图: se ...

  9. iOS中 Realm的学习与使用 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博! 有问题或技术交流可以咨询!欢迎加入! 这篇直接搬了一份官方文档过来看的 由于之前没用markdown搞的乱七八糟的 ...

随机推荐

  1. js登录,回车登录

    $(document).ready(function(){ $("#loginBtn").click(doLoginEvent); loadCookies(); //回车登录 do ...

  2. 将一个div置于另一个div之上

    div piao置于div bg之上 <div class="bg"> <div class="piao" style="backg ...

  3. jquery easyui datagrid 编辑行 类型combobox

    完成编辑瞬间datagrid中显示的是combobox的value 而非text var rows=$('#tb1').datagrid('getRows'); for(var i=0;i<ro ...

  4. gulp填坑记(一)

    gulp是基于Node.js的自动任务运行器.可以自动完成html.image.css和js等文件的检测.检查.合并.压缩.格式化等,并监听文件在改动后重复指定的这些步骤. 一.首先,我全局安装了gu ...

  5. 补充Mysql5.7用法

    下面简单介绍一下安装: [root@MySQL soft]# tar xf mysql-5.7.10-linux-glibc2.5-x86_64.tar.gz -C /data/service/ [r ...

  6. 【vuejs深入三】vue源码解析之二 htmlParse解析器的实现

    写在前面 一个好的架构需要经过血与火的历练,一个好的工程师需要经过无数项目的摧残. 昨天博主分析了一下在vue中,最为基础核心的api,parse函数,它的作用是将vue的模板字符串转换成ast,从而 ...

  7. docker管理工具

    Portainer是Docker的图形化管理工具,提供状态显示面板.应用模板快速部署.容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作).事件日志显示.容器控制台操作.Swarm集群和服 ...

  8. ACM Primes

    Write a program to read in a list of integers and determine whether or not each number is prime. A n ...

  9. Python3 基础语法

    编码 默认情况下,Python 3源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串. 当然你也可以为源码文件指定不同的编码: # -*- coding: cp-1252 -*- 标 ...

  10. Rails关闭html_safe字符串过滤

    在某些情况下我希望html的文本中包含一些换行,因为html5产生换行的方法是插入 <br />所以我可以这么写: text = "hello world!<br /> ...