调用手机内部邮件发送邮件,首先要对邮件进行设置,确定可以发送邮件后才可以,否则邮件无法正常发送。
1.头文件
#import <UIKit/UIKit.h>
#import <MessageUI/MessageUI.h>
#import "MailViewController.h"
@interface MailViewController ()<MFMailComposeViewControllerDelegate>
{
UILabel *sendResult;
}
@end
2.发送邮件
-(void)sendMail
{
if ([MFMailComposeViewController canSendMail])
{
NSLog(@"canSend:YES");
sendResult.text=@"canSend:Yes";
// 创建邮件发送界面
MFMailComposeViewController *mailCompose = [[MFMailComposeViewController alloc] init];
// 设置邮件代理
[mailCompose setMailComposeDelegate:self];
// 设置收件人
[mailCompose setToRecipients:@[@"liuliangchb@163.com"]];
// 设置抄送人
[mailCompose setCcRecipients:@[@"807243674@qq.com"]];
// 设置密送人
[mailCompose setBccRecipients:@[@"15690725786@163.com"]];
// 设置邮件主题
[mailCompose setSubject:@"Test"];
//设置邮件的正文内容
NSString *emailContent = @"Test mail";
// 是否为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:@"imageName"];//添加图片附件
NSData *imageData = UIImagePNGRepresentation(image);
[mailCompose addAttachmentData:imageData mimeType:@"" fileName:@"imageName.png"];
NSString *file = [[NSBundle mainBundle] pathForResource:@"pdfFile" ofType:@"pdf"];//添加子文件路径
NSData *pdf = [NSData dataWithContentsOfFile:file];
[mailCompose addAttachmentData:pdf mimeType:@"" fileName:@"pdfFile.pdf"];
NSString *file = [[NSString alloc] initWithString:filePath];//通过全路径filePath添加文件附件
NSData *pdf = [NSData dataWithContentsOfFile:file];
[mailView addAttachmentData:pdf mimeType:@"" fileName:[[NSString alloc] initWithString:fileName]];
*/
// 弹出邮件发送视图
[self presentViewController:mailCompose animated:YES completion:nil];
}
else
{
NSLog(@"canSend:NO");
sendResult.text=@"canSend:No";
}
}
3.通过代理获取发送结果
-(void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error{
switch (result) {
case MFMailComposeResultCancelled:
sendResult.text=@"Canceled";
break;
case MFMailComposeResultSaved:
sendResult.text=@"Saved";
break;
case MFMailComposeResultSent:
sendResult.text=@"Sent";
break;
case MFMailComposeResultFailed:
sendResult.text=@"Failed";
break;
}
// 关闭邮件发送视图
[self dismissViewControllerAnimated:YES completion:nil];
}
4.完整代码
#import "MailViewController.h"
@interface MailViewController ()<MFMailComposeViewControllerDelegate>
{
UILabel *sendResult;
}
@end
@implementation MailViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor=[UIColor blueColor];
sendResult=[[UILabel alloc] init];
sendResult.text=@"Result";
sendResult.frame=CGRectMake(150, 200, 100, 30);
[self.view addSubview:sendResult]; // Do any additional setup after loading the view.
UIButton *sendBtn=[[UIButton alloc] initWithFrame:CGRectMake(150, 400, 100, 30)];
sendBtn.backgroundColor=[UIColor redColor];
[sendBtn setTitle:@"Send" forState:UIControlStateNormal];
[sendBtn addTarget:self action:@selector(sendMail) forControlEvents:UIControlEventTouchDown];
[self.view addSubview:sendBtn];
}
-(void)sendMail
{
if ([MFMailComposeViewController canSendMail])
{
NSLog(@"canSend:YES");
sendResult.text=@"canSend:Yes";
// 创建邮件发送界面
MFMailComposeViewController *mailCompose = [[MFMailComposeViewController alloc] init];
// 设置邮件代理
[mailCompose setMailComposeDelegate:self];
// 设置收件人
[mailCompose setToRecipients:@[@"11111111111111111111@163.com"]];
// 设置抄送人
[mailCompose setCcRecipients:@[@"222222222222@qq.com"]];
// 设置密送人
[mailCompose setBccRecipients:@[@"33333333333333333@163.com"]];
// 设置邮件主题
[mailCompose setSubject:@"Test"];
//设置邮件的正文内容
NSString *emailContent = @"Test mail";
// 是否为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:@"imageName"];
NSData *imageData = UIImagePNGRepresentation(image);
[mailCompose addAttachmentData:imageData mimeType:@"" fileName:@"imageName.png"];
NSString *file = [[NSBundle mainBundle] pathForResource:@"pdfFile" ofType:@"pdf"];
NSData *pdf = [NSData dataWithContentsOfFile:file];
[mailCompose addAttachmentData:pdf mimeType:@"" fileName:@"pdfFile.pdf"];
*/
// 弹出邮件发送视图
[self presentViewController:mailCompose animated:YES completion:nil];
}
else
{
NSLog(@"canSend:NO");
sendResult.text=@"canSend:No";
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error{
switch (result) {
case MFMailComposeResultCancelled:
sendResult.text=@"Canceled";
break;
case MFMailComposeResultSaved:
sendResult.text=@"Saved";
break;
case MFMailComposeResultSent:
sendResult.text=@"Sent";
break;
case MFMailComposeResultFailed:
sendResult.text=@"Failed";
break;
}
// 关闭邮件发送视图
[self dismissViewControllerAnimated:YES completion:nil];
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
@end