iOS开发-发送邮件及短信

news/2024/7/20 22:01:35 标签: ios, 邮件, 短信

作者刘文涛
转载请注明出处

前言

在iOS开发中,有时候我们会需要用到发送邮件短信的功能。我们还可以通过发送邮件来接收用户反馈的崩溃通知等等。我用的是iOS原生自带的MFMailComposeViewController来实现的。他不会使程序进入后台,使用模态弹出邮件短信发送界面。

代码示例

邮件">1.发送邮件

使用前需要导入框架:MessageUI.framework
在使用的controller中导入头文件:
#import <MessageUI/MessageUI.h>
实现代理:
<MFMailComposeViewControllerDelegate,MFMessageComposeViewControllerDelegate>
获取用户是否设置了邮箱账户:

if ([MFMailComposeViewController canSendMail]) { 
        // 用户已设置邮件账户
        [self sendEmailAction]; // 调用发送邮件的代码
    }else{
        NSLog(@"用户未设置邮箱账户");
    }

sendEmailAction方法代码:

- (void)sendEmailAction
{
    // 邮件服务器
    MFMailComposeViewController *mailCompose = [[MFMailComposeViewController alloc] init];
    // 设置邮件代理
    [mailCompose setMailComposeDelegate:self];

    // 设置邮件主题
    [mailCompose setSubject:@"我是邮件主题"];

    // 设置收件人
    [mailCompose setToRecipients:@[@"邮箱号码"]];
    // 设置抄送人
    [mailCompose setCcRecipients:@[@"邮箱号码"]];
    // 设置密抄送
    [mailCompose setBccRecipients:@[@"邮箱号码"]];

    /**
     *  设置邮件的正文内容
     */
    NSString *emailContent = @"邮件内容...";
    // 是否为HTML格式
    [mailCompose setMessageBody:emailContent isHTML:NO];
    // 如使用HTML格式,则为以下代码
//    [mailCompose setMessageBody:@"<html><body><p>Hello</p><p>World!</p></body></html>" isHTML:YES];

    /**
     *  添加附件
     */
    UIImage *image = [UIImage imageNamed:@"image"];
    NSData *imageData = UIImagePNGRepresentation(image);
    [mailCompose addAttachmentData:imageData mimeType:@"" fileName:@"custom.png"];

    NSString *file = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"pdf"];
    NSData *pdf = [NSData dataWithContentsOfFile:file];
    [mailCompose addAttachmentData:pdf mimeType:@"" fileName:@"pdf文件"];

    // 弹出邮件发送视图
    [self presentViewController:mailCompose animated:YES completion:nil];
}
````
MFMailComposeViewControllerDelegate的代理方法:

````objc
    - (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error{

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

    // 关闭邮件发送视图
    [self dismissViewControllerAnimated:YES completion:nil];
}

短信">2.发送短信

获取用户能否发送短信

if ([MFMessageComposeViewController canSendText]) {
    [self sendMessageAction];
}else{
    NSLog(@"用户不能发送短信");
}

sendMessageAction方法代码:

//  调用系统API发送短信
- (void)sendMessageAction{

    MFMessageComposeViewController *messageVC = [[MFMessageComposeViewController alloc] init];
    // 设置短信代理
    messageVC.messageComposeDelegate = self;
    // 发送给谁
    messageVC.recipients = @[@"18701235678"];
    // 发送的内容
    messageVC.body = @"hello world";
    // 弹出发送短信的视图
    [self presentViewController:messageVC animated:YES completion:nil];

}

MFMessageComposeViewControllerDelegate的代理方法:

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

    switch (result) {
        case MessageComposeResultCancelled:
            NSLog(@"取消发送");
            break;
        case MessageComposeResultFailed:
            NSLog(@"发送失败");
            break;
        case MessageComposeResultSent:
            NSLog(@"发送成功");
            break;
        default:
            break;
    }

    [self dismissViewControllerAnimated:YES completion:nil];

}

结语

以上代码均在真机(iOS9)进行测试,并通过测试。注意发送邮件的时候需要你绑定邮箱账户。
本文demo。


http://www.niftyadmin.cn/n/1425671.html

相关文章

freemarker学习笔记1

1.下载freemarker&#xff0c;解压,在工程中加入freemarker.jar 2.创建模本文件 myftl.ftl <html><head><title>Welcome!</title></head><body><h1>Welcome ${user}!</h1><p>点一下:<a href"${websites.url}&qu…

iOS 动态下载系统提供的多种中文字体

作者刘文涛 转载请注明出处 一、功能简介 1.前言 为了实现更好的字体效果&#xff0c;有些应用在自己的应用资源包中加入了字体文件。但自己打包字体文件比较麻烦&#xff0c;原因在于&#xff1a; 1.字体文件通常比较大&#xff0c;10~20M是常见的字体库大小。如果只是很…

struts+hibernate+spring的配置文件

struts1hibernatespring的配置 在xml中加入spring支持 <context-param> <param-name>contextConfigLocation </param-name> <param-value> /WEB-INF/classes/applicationContext.xml </param-value> </context-param> <listen…

关于ssh的一些想法

1、Struts1&#xff0c;简单&#xff0c;可靠&#xff0c;乏味&#xff0c;罗嗦&#xff0c;有各种工具支持&#xff0c;可以满足大多数表单-》查询-》数据库这样的应用的需求。应该说&#xff0c;做网站用struts不稀奇&#xff0c;不用才稀奇。 2、Spring&#xff0c;IOC是个不…

iOS开发 字符串中截取关键字并给他设置颜色

UILabel *contentLabel [[UILabel alloc] initWithFrame:CGRectMake(20, 100, 300, 200)];contentLabel.textColor [UIColor blackColor];[self.view addSubview:contentLabel];NSString *keyName "关键字";NSString *string "我是一句话&#xff0c;哪个字…

JAP JNDI JTA POJO JSF JMS

JPA是个类似HIBERNATE的用于持久化框架。HIBERNATE怎么用它就怎么用。 JNDI就用的比较多了&#xff0c;JNDI是一个用于访问命名和目录服务的API。用法吗很简单譬如一个数据源&#xff0c;我们定义成JNDI&#xff0c;然后我们直接找JNDI就可以找到它。 JTA是用于JAVA的事务处理…

SDWebImage 图片加载失败

今天在项目中&#xff0c;使用SDWebImage加载图片&#xff0c;总有图片加载不出来。使用 [self.centerIV sd_setImageWithURL:[NSURL URLWithString:self.sourceDataArr[currentImageIndex]] placeholderImage:self.placeHolderImage completed:^(UIImage *image, NSError *err…

iOS面试知识点整理

整理一下最近面试问到的知识点。 一、iOS的设计模式有哪些&#xff0c;简单的介绍一下&#xff1a; MVC模式&#xff1a;Model 设置对应的属性及构造方法。View 主要负责 UI 的实现&#xff0c;而 UIView 所产生的事件都可以采用委托的方式&#xff0c;交给 UIViewController…