MFMailComposeViewController发送邮件
1.iPhone API已经提供了系统写邮件界面的接口,使用MFMailComposeViewController,用来显示界面.
2.项目中需要添加MessageUi.framework。头文件加入MFMailComposeViewControllerDelegate。#import <MessageUI/MessageUI.h>
- (void)viewDidLoad
{
// 实例化按钮用来调用邮箱
UIButton *button = [UIButton buttonWithType: UIButtonTypeRoundedRect];
button.frame = CGRectMake(0, 40, 320, 50);
[button setTitle: @"Mail" forState: UIControlStateNormal];
[button addTarget: self action: @selector(sendEmailAction) forControlEvents: UIControlEventTouchUpInside];
[self.view addSubview: button];
}
- (void)sendEmailAction
{
Class mailClass = (NSClassFromString(@"MFMailComposeViewController"));
if (mailClass != nil)
{
if ([mailClass canSendMail])
{
[self displayComposerSheet ];
}else{
[self launchMailAppOnDevice];
}
}else {
[self launchMailAppOnDevice];
}
}
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
{
// [self dismissModalViewControllerAnimated:YES];
[self dismissViewControllerAnimated:YES completion:nil];
NSString*msg;
switch (result) {
case MessageComposeResultCancelled:
msg = @"发送取消";
break;
case MessageComposeResultSent:
msg = @"发送成功";
break;
case MessageComposeResultFailed:
msg = @"发送失败";
break;
default:
break;
}
UIAlertView*alert = [[UIAlertView alloc] initWithTitle:nil
message:msg
delegate:nil
cancelButtonTitle:@"关闭"
otherButtonTitles:nil];
[alert show];
}
//email界面,界面添加于window上
-(void)displayComposerSheet
{
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
[picker setAccessibilityLanguage:@"Chinese"];
if (!picker) {
// 在设备还没有添加邮件账户的时候mailViewController为空,下面的present view controller会导致程序崩溃,这里要作出判断
NSLog(@"设备还没有添加邮件账户");
return;
}
picker.mailComposeDelegate = self;
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 5.0) {
UIView *barBgV = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 44)];
barBgV.backgroundColor = [UIColor colorWithRed:55/255.0 green:60/255.0 blue:100/255.0 alpha:1.0];
UIImage *barBgImg = [Tool convertViewToImage:barBgV];
[[picker navigationBar] setBackgroundImage:barBgImg forBarMetrics:UIBarMetricsDefault];
}
// Set up recipients
NSArray *toRecipients = [NSArray arrayWithObject:staff.email];
[picker setToRecipients:toRecipients];
// NSString *path = [[NSBundle mainBundle] pathForResource:@"Icon@2x.png"
// ofType:nil
// inDirectory:nil];
// NSData *myData = [NSData dataWithContentsOfFile:path];
// [picker addAttachmentData:myData mimeType:@"image/png" fileName:@"icon"];
[picker setMessageBody:nil isHTML:YES];
[self presentViewController:picker animated:YES completion:^{
picker.accessibilityElementsHidden = YES;
}];
// [self presentModalViewController:picker animated:YES];
}
//跳转到系统email界面
-(void)launchMailAppOnDevice
{
NSString *recipients = [NSString stringWithFormat:@"mailto:%@?&subject=",staff.email];
NSString *email = recipients;
email = [email stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:email]];
}
#pragma mark - 代理
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
//关闭邮件发送窗口
[self dismissViewControllerAnimated:YES completion:nil];
NSString *msg;
switch (result)
{
case MFMailComposeResultCancelled:
msg = @"用户取消编辑邮件";
break;
case MFMailComposeResultSaved:
msg = @"用户成功保存邮件";
break;
case MFMailComposeResultSent:
msg = @"发送成功";
break;
case MFMailComposeResultFailed:
msg = @"用户试图保存或者发送邮件失败";
break;
default:
break;
}
[[[UIAlertView alloc]initWithTitle:nil message:msg delegate:nil cancelButtonTitle:@"关闭" otherButtonTitles:nil, nil]show];
}
设置中文:
1.可以在项目的list属性文件中设置Localization native development region的属性值 为:China;
2.可以在调用MFMailComposeViewController的xib中设置Localization(方法如下:找到对应xib文件,右击该文件选择Get Infoà [General选项卡下单击{add Localization}])如中文简体{zh_CN}
3.或者在自己手机:设置-->通用--->多语言环境-->语言--->简体中文;
General--->International-->Language--->简体中文;
MFMailComposeViewController发送邮件的更多相关文章
- MFMailComposeViewController发送邮件的实例
本文转载至 http://blog.csdn.net/liufeng520/article/details/7585140 iPhone API已经提供了系统写邮件界面的接口,使用MFMailCo ...
- 发送邮件(E-mail)方法整理合集
在IOS开发中,有时候我们会需要用到邮件发送的功能.比如,接收用户反馈和程序崩溃通知等等.其实这个功能是很常用的,因为我目前就有发送邮件的开发需求,所以顺便整理下IOS发送邮件的方法. IOS原生自带 ...
- iOS-----MFMessageCompose 和 MFMailComposeViewController的使用方法
MFMessageCompose 和 MFMailComposeViewController的使用方法 使用MFMessageComposeViewCOntroller发短信 应用想自己提供界面让用户 ...
- iOS开发-发送邮件(E-mail)方法整理合集(共3种)
前言:在IOS开发中,有时候我们会需要用到邮件发送的功能.比如,接收用户反馈和程序崩溃通知等等.其实这个功能是很常用的,因为我目前就有发送邮件的开发需求,所以顺便整理下IOS发送邮件的方法. IOS原 ...
- iOS调用系统功能发邮件
使用MFMailComposeViewController发送邮件 1.项目需要导入框架:MessageUI.framework 2.使用的Controller的.h文件中添加代理 MFMailCom ...
- iOS开发-邮件发送
Web开发的时候邮箱注册登录是必不可少的,手机号可以更换,不过相对而言,邮箱只是用于比较重要的时候用到,比如找工作的时候必填的邮箱,注册网站会员的邮箱验证.现在的手机和Web的其实操作是一样的,大多数 ...
- 《疯狂iOS讲义(下)——iPhone/iPad高级应用与手游开发(含CD光盘1张)》
<疯狂iOS讲义(下)——iPhone/iPad高级应用与手游开发(含CD光盘1张)> 基本信息 作者: 李刚 肖文吉 出版社:电子工业出版社 ISBN:9787121224379 ...
- 发送邮件--MFMailComposeViewController
只能在真机使用. 模拟器没有E-mail发送功能.无法调用 #import "EmailViewController.h" #import <UIKit/UIKit.h> ...
- mono中发送邮件并保存本次收件人的地址
在ios端mono开发中,发送邮件可以选择调用ios原生email程序.有两种方式实现这种功能,一是程序跳转到ipad中email程序,另外一种是将发送邮件的界面在自己应用里弹出. 首先第一种方式的代 ...
随机推荐
- Ubuntu16.04多个版本GCC编译器的安装和切换【转】
本文转载自:https://www.cnblogs.com/uestc-mm/p/7511063.html 这几天在配置交叉编译ARM开发板的linux内核的过程中碰到了很多问题,其中包括了GCC版本 ...
- UVa 11768 格点判定(扩展欧几里得求线段整点)
https://vjudge.net/problem/UVA-11768 题意: 给定两个点A(x1,y1)和B(x2,y2),均为0.1的整数倍.统计选段AB穿过多少个整点. 思路: 做了这道题之后 ...
- python2.7.10 VS2015编译方法
打开 Python-2.7.10\PCbuild目录 然后设置只编译python和pythoncore: 好了,编译试一试. 出现了好几个错误.由于 VS2015 取消了 timezone 的定义,改 ...
- 用cookies判断用户首次登录
要求:判断24小时内用户是否是首次登录,如果是则显示弹窗,如果不是则不再显示弹窗 (function() { //是否是新访客 function isNewVisitor() { //从cookie读 ...
- nignx的master进程和worker进程的作用
ngnix进程启动启动后会有一个master进程和多个worker进程. master进程的主要作用: 1.读取并验证配置信息: 2.创建,绑定及关闭套接字: 3.启动,终止worker进程以及维护w ...
- cygwin 获取root高级权限
cygwin安装完成后没有passwd文件解决方法
- 【平台中间件】Nginx安装配置,实现版本更新不影响服务访问
为什么要做负载均衡? 当你网站是一个企业站.个人博客的时候,或者访问量比较小的时候,一台服务器完全应付的了,那就完全没必要做负载均衡.但是,如果你的网站是平台级别,用户达到十万百万级别了,一台服务器明 ...
- 利用javascript实现页面截图
html2canvas可以通过纯JS对浏览器端经行截屏,但截图的精确度还有待提高,部分css不可识别,所以在canvas中不能完美呈现原画面样式 兼容性: Firefox 3.5+ Google Ch ...
- Vue单页面中进行业务数据的上报
为什么要在标题里加上一个业务数据的上报呢,因为在咱们前端项目中,可上报的数据维度太多,比如还有性能数据.页面错误数据.console捕获等.这里我们只讲解业务数据的埋点. 业务数据的上报主要分为: 各 ...
- form表单提交数据的数据格式
form表单提交的数据格式默认是 enctype="application/x-www-form-urlencoded"这样将input框的数据与input框的name属性以键值对 ...