iOS调用系统功能发邮件
使用MFMailComposeViewController发送邮件
1.项目需要导入框架:MessageUI.framework
2.使用的Controller的.h文件中添加代理 MFMailComposeViewControllerDelegate 并且导入头文件:#import <MessageUI/MessageUI.h>
3.判断用户是否设置了邮箱账户
BOOL canSend = [MFMailComposeViewController canSendMail];
if (canSend) {
[self sendEmailAction];
}else{
//提示用户添加邮件账户
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Please Add Your Mail Account:" message:@"Settings->Mail,Contacts,Calendars->Add Account" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *defaultAction = [UIAlertAction actionWithTitle:[kGlobal getStringValueWithKey:@"OK"] style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {}];
[alert addAction:defaultAction];
[self presentViewController:alert animated:YES completion:nil];
}
4.sendEmailAction方法代码
- (void)sendEmailAction
{
// 邮件服务器
MFMailComposeViewController *mailCompose = [[MFMailComposeViewController alloc] init];
// 设置邮件代理
[mailCompose setMailComposeDelegate:self];
// 设置邮件主题
[mailCompose setSubject:@"我是邮件主题"];
// 设置收件人
[mailCompose setToRecipients:@[@"1234567890@qq.com"]];
// 设置抄送人
[mailCompose setCcRecipients:@[@"1234567890@qq.com"]];
// 设置密抄送
[mailCompose setBccRecipients:@[@"1234567890@126.com"]];
/**
* 设置邮件的正文内容
*/
NSString *emailContent = @"我是邮件内容";
// 是否为HTML格式
[mailCompose setMessageBody:emailContent isHTML:NO];
// 如使用HTML格式,则为以下代码
/**
NSData *imageData = UIImageJPEGRepresentation(self.cellImage, 0.5);
NSString *encodedString = [imageData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithCarriageReturn]; NSString *emailContent = [NSString stringWithFormat:@"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\"><head><meta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\"></head><body><img src=\"data:image/jpeg;base64,%@\" /><p><table width=\"300px\"><tr><td colspan=\"2\" align=\"left\" style=\"color:red;font-style:italic\">%@</td></tr><tr><td>%@</td><td align=\"right\">%@</td></tr><tr><td>%@</td><td align=\"right\">%@</td></tr><tr><td>%@</td><td align=\"right\">%@</td></tr><tr><td>%@</td><td align=\"right\">%@</td></tr><tr><td colspan=\"2\" align=\"left\" style=\"color:red;font-style:italic\">%@</td></tr><tr><td>%@</td><td align=\"right\">%@</td></tr><tr><td>%@</td><td align=\"right\">%@</td></tr><tr><td>%@</td><td align=\"right\">%@</td></tr></table></p></body></html>",encodedString,firstTitle,[kGlobal getStringValueWithKey:@"casePrice"],[Global getFormatStr:self.offering.case_price],[kGlobal getStringValueWithKey:@"casesneeded"],[Global getFormatStr:self.offering.cases_needed],[kGlobal getStringValueWithKey:@"productsavingcases"],[NSString stringWithFormat:@"$%@",[Global getFormatStr:self.offering.product_savings]],[kGlobal getStringValueWithKey:@"annualSaving"],[NSString stringWithFormat:@"$%@",[Global getFormatStr:self.offering.annual_savings]],secondTitle,[kGlobal getStringValueWithKey:@"pricepaidpercase"],[Global getFormatStr:self.operatorVolume.pricePerCase],[kGlobal getStringValueWithKey:@"casespurchasedannually"],[Global getFormatStr:self.competitorProduct.cases_purchase_annuaully],[kGlobal getStringValueWithKey:@"costofcompetitiveproduct"],[Global getFormatStr:self.competitorProduct.cost_of_competitive_product]];//直接把图片转成Base64编码放到邮件里面,注意Base64编码图片的格式(PNG,JPEG)要和压缩的格式一样,否则不能显示
*/
//添加附件
//添加图片附件
UIImage *image = [UIImage imageNamed:@"image"];
NSData *imageData = UIImagePNGRepresentation(image);
[mailCompose addAttachmentData:imageData mimeType:@"" fileName:@"custom.png"];
//添加PDF附件
NSString *file = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"pdf"];
NSData *pdf = [NSData dataWithContentsOfFile:file];
[mailCompose addAttachmentData:pdf mimeType:@"" fileName:@"test"]; // 弹出邮件发送视图
[self presentViewController:mailCompose animated:YES completion:nil];
}
5.MFMailComposeViewControllerDelegate的代理方法:
- (void)mailComposeController:(MFMailComposeViewController *)controller
didFinishWithResult:(MFMailComposeResult)result
error:(NSError *)error
{
switch (result)
{
case MFMailComposeResultCancelled: // 用户取消编辑
NSLog(@"Mail send canceled...");
break;
case MFMailComposeResultSaved: // 用户保存邮件
NSLog(@"Mail saved...");
break;
case MFMailComposeResultSent: // 用户点击发送
NSLog(@"Mail sent...");
break;
case MFMailComposeResultFailed: // 用户尝试保存或发送邮件失败
NSLog(@"Mail send errored: %@...", [error localizedDescription]);
break;
}
// 关闭邮件发送视图
[self dismissViewControllerAnimated:YES completion:nil];
}
需要注意的事项:
1.邮件的发送必须真机测试,ipad或iPhone测试都行,否则会崩溃
2.添加的附件在邮件编辑的过程中会直接显示在正文内容后面,发送之后需要下载
3.发送非HTML内容时,正文内容是一个NSString类型的字符串;如果发送HTML类型的数据,需要注意尽量写标准的HTML格式,不然邮件无法解析,我上面写的发送的HTML格式的内容中,实际上混合了一张图片和一个表格,图片采用的是Base64的编码格式,浏览器可以直接解析Base64编码,但是注意邮件不是浏览器,邮件对HTML的格式要求更加严格。我就因为加载JPEG格式的图片时,在HTML中使用了PNG格式的Base64的解码方式,结果在浏览器中可以正常显示,邮件中无法显示。而且通过Base64嵌入到网页中的图片有大小限制,尽量嵌入小图片。
Data URI scheme支持的类型有:
data:,文本数据
data:text/plain,文本数据
data:text/html,HTML代码
data:text/html;base64,base64编码的HTML代码
data:text/css,CSS代码
data:text/css;base64,base64编码的CSS代码
data:text/javascript,Javascript代码
data:text/javascript;base64,base64编码的Javascript代码
data:image/gif;base64,base64编码的gif图片数据
data:image/png;base64,base64编码的png图片数据
data:image/jpeg;base64,base64编码的jpeg图片数据
data:image/x-icon;base64,base64编码的icon图片数据
iOS调用系统功能发邮件的更多相关文章
- IOS 调用系统发邮件Api
// 判断设备是否有发送邮件功能 NSString *deviceType = [UIDevice currentDevice].model; if([deviceType isEqualToStri ...
- ios 调用系统发短信以及打电话功能
先介绍一种最简单的方法: 调用打电话功能 [[UIApplicationsharedApplication] openURL:[NSURL URLWithString:@"tel://100 ...
- Python调用Outlook发邮件
调用Outlook发送邮件 需安装pypiwin32模块:pip install pypiwin32 1. 发送普通邮件 import win32com.client as win32 outlook ...
- iOS打电话、发邮件、发短信、打开浏览器
//1.调用 自带mail [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://163@16 ...
- ios-王云鹤 调用ios系统功能---------------打电话、发短信、发邮件
--------------------------------------菜鸟总结,欢迎读者雅正------------------------------------------------- 先 ...
- iOS 打电话、发短信、邮件、打开网址、调用应用等合集
iOS中的很多功能都是非常简单的,几行代码就搞定了,比如打电话.打开网址.发邮件.发短信等,这里总结几个比较常用的: 1.打电话 方式一:最简单最直接的方式:直接跳到拨号界面 NSURL *url = ...
- IOS,发短信,发邮件,打电话
今天把APP里常用小功能 例如发短信.发邮件.打电话.全部拿出来简单说说它们的实现思路. 1.发短信实现打电话的功能,主要二种方法,下面我就分别说说它们的优缺点.1.1.发短信(1)——URL // ...
- iOS基本的发短信和打电话调用
电话.短信是手机的基础功能,iOS中提供了接口,让我们调用.这篇文章简单的介绍一下iOS的打电话.发短信在程序中怎么调用. 1.打电话 [[UIApplication sharedApplicatio ...
- iOS打电话、发短信、发邮件功能开发
本文转载至 http://www.lvtao.net/ios/506.html 今天把APP里常用小功能 例如发短信.发邮件.打电话.全部拿出来简单说说它们的实现思路. 1.发短信实现打电话的功能,主 ...
随机推荐
- 《Pro Git》笔记2:Git基础操作
第二章 Git基础 Git基础包括:版本库的创建和获取,文件添加修改提交等基本操作,状态查询,远程版本库管理和同步,打标签. 1.取得项目的Git版本库 基于Git的工作流要以Git版本库为基础,即可 ...
- DS实验题 最大最小
题目: 算法设计: 计算最小值算法: 设置一个flag,flag为1的时候代表遇到*号: 遇到数字时: flag为0进栈: flag为1的时候,从栈顶提出一个元素和当前元素运算,结果进栈 最后对栈进行 ...
- 20. 求阶乘序列前N项和
求阶乘序列前N项和 #include <stdio.h> double fact(int n); int main() { int i, n; double item, sum; whil ...
- cURL 学习笔记与总结(4)使用 cURL 从 ftp 上下载文件与上传文件到 ftp
下载: <?php $curlobj = curl_init(); curl_setopt($curlobj, CURLOPT_URL, "ftp://192.***.*.***/文件 ...
- RT-Thread创建静态、动态线程
RT-Thread 实时操作系统核心是一个高效的硬实时核心,它具备非常优异的实时性.稳定性.可剪裁性,当进行最小配置时,内核体积可以到 3k ROM 占用. 1k RAM 占用. RT-Thread ...
- Class 实现IDisposing方法
public class MyResourceHog : IDisposable { // 已经被处理过的标记 private bool _alreadyDisposed = false; ...
- Python之什么是dict
我们已经知道,list 和 tuple 可以用来表示顺序集合,例如,班里同学的名字: ['Adam', 'Lisa', 'Bart'] 或者考试的成绩列表: [95, 85, 59] 但是,要根据名字 ...
- ubuntu 64bit arm-linux-gcc: No such file or directory 解决
通过下面这个解决 ubuntu 64bit arm-linux-gcc: No such file or directory 安装 sudo apt-get install lsb-core解决 h ...
- AppDelegate
一.基础知识 1) main.m指定了程序的入口点 UIApplicationMain(argc, argv,nil,NSStringFromClass([StartingPointAppDelega ...
- Visual Studio 2010扩展让JS与CSS实现折叠
在Visaul Studio 2010中写js或css代码,缺少像写C#代码时的那种折叠功能,当代码比较多时,就很不方便. 今天发现,已经有VS2010扩展支持这个功能,它就是——JSEnhancem ...