iOS中发送邮件

在开发过程中,有时会需要调用原生的发送邮件功能,用来实现自己应用中的一些业务处理流程,对此,官方开放了两个API可以供开发者调用

OpenURL方式

首先,最简单的方式是调用OpenURL,代码如下:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto:10010@qq.com"]];

iOS10之后苹果官方建议使用下面的方法:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://10010@qq.com"] options:@{} completionHandler:^(BOOL success) {
    if (success) {
        NSLog(@"调用成功");
    }else{
        NSLog(@"调用失败");
    }
}];

这种方式是调用原生组件的方式,打电话,发短信,发邮件,调用原生地图,甚至进入相应app的设置页面也可以使用这种方式,但使用这种方式需要跳出当前app,且无法监听用户操作。

MessageUI

系统还提供了页面调用方式,不用跳出当前app也能使用发送邮件的功能,而且可以监听用户操作。

下面是调用步骤:

1.导入MessageUI头文件

#import <MessageUI/MessageUI.h>

2.调用时先判断当前设备是否支持该调用方式

if ([MFMailComposeViewController canSendMail]) {
    //  判断一下是否支持发送邮件,比如模拟器
    MFMailComposeViewController *mailVC = [[MFMailComposeViewController alloc] init];
    // 需要发送的邮箱数组
    [mailVC setToRecipients:@[@"test@qq.com", @"test1@11.com"]];
    // 需要抄送的邮箱数组
    [mailVC setCcRecipients:@[@"test2@qq.com", @"test3@11.com"]];
    // 需要密送的邮箱数组
    [mailVC setBccRecipients:@[@"test2@qq.com", @"test3@11.com"]];
    // 邮件主题
    [mailVC setSubject:@"邮件主题"];
    // 添加一张图片
    UIImage *addPic = [UIImage imageNamed:@"756DACBA-C620-4829-BD29-36289AB948BC.png"];
    NSData *imageData = UIImagePNGRepresentation(addPic);// png
    [mailVC addAttachmentData:imageData mimeType:@"image" fileName:@"Icon.png"];
    // 关于mimeType:http://www.iana.org/assignments/media-types/
    //    application
    //    audio
    //    font
    //    example
    //    image
    //    message
    //    model
    //    multipart
    //    text
    //    video
    // 添加一个附件
    NSData *pdf = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://jamesfiles.oss-cn-hangzhou.aliyuncs.com/190619/2816435-14aa3174d94a7eff.png"]];
    // 关于mimeType:http://www.iana.org/assignments/media-types/
    [mailVC addAttachmentData:pdf mimeType:@"application" fileName:@"附加名称.png"];
    
    // 富文本为 isHTML:YES  字符串isHTML:NO
    NSString *emailBody = @"<font color='red'>eMail</font> 我的邮件";
    [mailVC setMessageBody:emailBody isHTML:YES];
    mailVC.mailComposeDelegate = self; //指定代理
    [self presentViewController:mailVC animated:YES completion:nil];
} else {
    NSLog(@"该设备不支持发送邮件功能");
}

3.遵循MessageUI的代理方法(MFMailComposeViewControllerDelegate)

进入头文件后可以看到,MessageUI只有一个代理方法

- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(nullable NSError *)error ;

按住command,点击MFMailComposeResult类,可以看到,代理返回的result是个枚举类型

typedef NS_ENUM(NSInteger, MFMailComposeResult) {
    MFMailComposeResultCancelled, // 用户取消了操作
    MFMailComposeResultSaved,// 成功保存了消息
    MFMailComposeResultSent,// 用户成功发送或排队中
    MFMailComposeResultFailed// 用户保存或发送失败
} API_AVAILABLE(ios(3.0)) ;
- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
    switch (result) {
        case MFMailComposeResultSent:
            NSLog(@"用户成功发送或排队中");
            break;
        case MFMailComposeResultCancelled:
            NSLog(@"用户取消发送");
            break;
        case MFMailComposeResultSaved:
            NSLog(@"邮件已保存");
            break;
        default:
            NSLog(@"发送或保存失败");
            break;
    }
    [controller dismissViewControllerAnimated:YES completion:nil];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值