iOS开发——发送邮件
2013-11-10 16:08
281 查看
声明:原创博客,转载请注明出处
iOS开发中,要实现应用发送邮件的功能有多种方法。本文中介绍的邮件发送功能是由MessageUI Framework提供的,这个框架是iPhone SDK中最简单的框架。由一个类、一个视图控制器,一个protocol组成。
为了直观地演示,我们通过一个Step by Step的Demo来阐述下这个方法的基本使用技巧。
首先,创建一个Single View的示例项目。这里,我创建了一个名为MailSystemDemo的Single View项目。然后在ViewController对应的xib中添加一个按钮,为该按钮实现一个响应的方法,方法中的内容暂时为空即可,稍后我们将把调用发送邮件方法的语句写入到此按钮方法中。
其次,正如前面介绍的,发送邮件的功能是由MessageUI Framework提供的,所以我们要在Buil Phases中添加MessageUI.framework框架。然后,在ViewController.h文件中加入如下代码,引入头文件并且采用MFMailComposeViewControllerDelegate协议。
在ViewController.m文件中,实现如下发送邮件的核心方法:
然后,我们在ViewController.m文件中实现一个MFMailComposeViewControllerDelegate协议中的方法,无论用户是否发送或取消发送,不论系统是否能够实现邮件发送,此方法都会被回调。
最后,我们在按钮的响应方法中调用发送邮件的方法。这里,我们需要对设备是否可以发送邮件做一个判断。如果用户已经在邮件客户端配置好了账户,那我们直接调用发送邮件的方法,否则我们就得先用[[UIApplication
sharedApplication] openURL:]方法来加载系统的邮件客户端,让用户先进行邮箱的配置。
调用系统邮件客户端进行邮箱配置的方法如下:
到这里,实现发送邮件功能的代码就都完成了,你现在就可以尝试运行一下程序,对其进行测试。
这种方法的突出优点就是简单方便,而且功能全面,可以满足大部分App的需求。当然它也有一个明显的劣势,iOS系统替我们提供了一个mail中的UI,而我们却完全无法对其进行订制,这会让那些定制化成自己风格的App望而却步,因为这样使用的话无疑太突兀了。
iOS开发中,要实现应用发送邮件的功能有多种方法。本文中介绍的邮件发送功能是由MessageUI Framework提供的,这个框架是iPhone SDK中最简单的框架。由一个类、一个视图控制器,一个protocol组成。
为了直观地演示,我们通过一个Step by Step的Demo来阐述下这个方法的基本使用技巧。
首先,创建一个Single View的示例项目。这里,我创建了一个名为MailSystemDemo的Single View项目。然后在ViewController对应的xib中添加一个按钮,为该按钮实现一个响应的方法,方法中的内容暂时为空即可,稍后我们将把调用发送邮件方法的语句写入到此按钮方法中。
其次,正如前面介绍的,发送邮件的功能是由MessageUI Framework提供的,所以我们要在Buil Phases中添加MessageUI.framework框架。然后,在ViewController.h文件中加入如下代码,引入头文件并且采用MFMailComposeViewControllerDelegate协议。
#import <MessageUI/MFMailComposeViewController.h> @interface ViewController : UIViewController <MFMailComposeViewControllerDelegate>
在ViewController.m文件中,实现如下发送邮件的核心方法:
- (void)sendEmail { MFMailComposeViewController *sendMailViewController = [[MFMailComposeViewController alloc] init]; sendMailViewController.mailComposeDelegate = self; // 设置邮件主题 [sendMailViewController setSubject:@"Test Message"]; /* * 设置收件人,收件人有三种 */ // 设置主收件人 [sendMailViewController setToRecipients:[NSArray arrayWithObject:@"example@163.com"]]; // 设置CC [sendMailViewController setCcRecipients:[NSArray arrayWithObject:@"example@hotmail.com"]]; // 设置BCC [sendMailViewController setBccRecipients:[NSArray arrayWithObject:@"example@gmail.com"]]; /* * 设置邮件主体,有两种格式 */ // 一种是纯文本 [sendMailViewController setMessageBody:@"Hello World!\nIs everything OK?" isHTML:NO]; // 一种是HTML格式(HTML和纯文本两种格式按需求选择一种即可) //[mailVC setMessageBody:@"<HTML><B>Hello World!</B><BR/>Is everything OK?</HTML>" isHTML:YES]; // 添加附件 NSString *path = [[NSBundle mainBundle] pathForResource:@"feedback" ofType:@"png"]; NSData *data = [NSData dataWithContentsOfFile:path]; [sendMailViewController addAttachmentData:data mimeType:@"image/png" fileName:@"feedback"]; // 视图呈现 [self presentViewController:sendMailViewController animated:YES completion:nil]; }
然后,我们在ViewController.m文件中实现一个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 sent Failed."); break; } default: break; } [self dismissViewControllerAnimated:YES completion:nil]; }
最后,我们在按钮的响应方法中调用发送邮件的方法。这里,我们需要对设备是否可以发送邮件做一个判断。如果用户已经在邮件客户端配置好了账户,那我们直接调用发送邮件的方法,否则我们就得先用[[UIApplication
sharedApplication] openURL:]方法来加载系统的邮件客户端,让用户先进行邮箱的配置。
- (IBAction)sendEmailBtnPressed:(id)sender { Class mailClass = (NSClassFromString(@"MFMailComposeViewController")); if (mailClass != nil) { if ([mailClass canSendMail]) { [self sendEmail]; // 调用发送邮件的方法 } else { [self launchMailAppOnDevice]; // 调用客户端邮件程序 } } else { [self launchMailAppOnDevice]; // 调用客户端邮件程序 } }
调用系统邮件客户端进行邮箱配置的方法如下:
-(void)launchMailAppOnDevice { NSString *recipients = @"mailto:first@example.com&subject=my email!"; //@"mailto:first@example.com?cc=second@example.com,third@example.com&subject=my email!"; NSString *body = @"&body=email body!"; NSString *email = [NSString stringWithFormat:@"%@%@", recipients, body]; email = [email stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; [[UIApplication sharedApplication] openURL: [NSURL URLWithString:email]]; }
到这里,实现发送邮件功能的代码就都完成了,你现在就可以尝试运行一下程序,对其进行测试。
这种方法的突出优点就是简单方便,而且功能全面,可以满足大部分App的需求。当然它也有一个明显的劣势,iOS系统替我们提供了一个mail中的UI,而我们却完全无法对其进行订制,这会让那些定制化成自己风格的App望而却步,因为这样使用的话无疑太突兀了。
相关文章推荐
- iOS开发之邮件发送代码
- iOS开发之邮件发送代码
- iOS开发笔记--iOS后台发送邮件
- iOS开发之邮件发送代码
- iOS开发中捕获Crash 发送Bug邮件
- iOS开发-发送邮件(E-mail)方法整理合集(共3种)
- iOS开发之邮件发送代码
- IOS开发~异常捕捉,发送邮件
- 在iOS开发中,经常需要调用其它App,如拨打电话、发送邮件等。UIApplication:openURL:方法是实现这一目的的
- iOS开发之调用邮件发送
- iOS开发之打电话,发短信,发送邮件
- iOS开发 MFMailComposeViewController(发送邮件)的使用
- iOS开发之邮件发送代码
- IOS开发-发送邮件(E-mail)方法整理合集(共3种)
- iOS开发之发送邮件
- iOS开发-发送邮件(E-mail)方法整理合集(共3种)
- iOS开发之邮件发送代码
- iOS开发中实现邮件和短信发送的简单示例
- iOS开发之邮件发送
- iOS开发之发送邮件