App内邮件发送

Posted iOS的美丽岁月

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了App内邮件发送相关的知识,希望对你有一定的参考价值。

引入

       上一篇我们介绍了App内发送短信。本节我们介绍在App 内如何发送邮件。


一:发送邮件的准备

          使用邮件发送功能,我们需要引入 #import <MessageUI/MessageUI.h> 头文件;使用该头文件下的 MFMailComposeViewController 类。头文件的引入实例如下:

#import "ViewController.h"
#import <MessageUI/MessageUI.h>


引入头文件后,要准守 MFMailComposeViewControllerDelegate 协议。同时要实现 mailComposeController:didFinishWithResult:error: 方法处理邮件发送后的返回结果。
@interface ViewController ()<MFMailComposeViewControllerDelegate>
@end

二、 MFMailComposeViewController 类的介绍

// 判断时候可以发送邮件
+ (BOOL)canSendMail;

// 设置邮件的代理,用于处理邮件发送后返回结果的处理
@property (nonatomic, nullable, assign) id<MFMailComposeViewControllerDelegate> mailComposeDelegate;


// 设置邮件的主题
- (void)setSubject:(NSString *)subject;


// 设置邮件的直接发送人
- (void)setToRecipients:(nullable NSArray<NSString *> *)toRecipients;

// 设置邮件的抄送人
- (void)setCcRecipients:(nullable NSArray<NSString *> *)ccRecipients;


// 设置邮件的密送人
- (void)setBccRecipients:(nullable NSArray<NSString *> *)bccRecipients;


// TODO: To、Cc、Bcc 的区别
// To: 是发送给指定的某一个人。
// Cc: 是 Carbon Copy 的缩写。是抄送的意思。收件人可以看到邮件还抄送给其他的那些人。
// Bcc : 是 Blind Carbon Copy 的缩写。是秘密抄送的意思。收件人看不到还抄送了其他的那些人。


// 设置邮件的内容,ishtml是之是否将邮件内容转化为HTML格式
- (void)setMessageBody:(NSString *)body isHTML:(BOOL)isHTML;



// 添加邮件的附件
- (void)addAttachmentData:(NSData *)attachment mimeType:(NSString *)mimeType fileName:(NSString *)filename;


// 设置优先发送邮件的账户,如果账户不存在。则选取默认账户。ios11.0 以上可用
- (void)setPreferredSendingEmailAddress:(NSString *)emailAddress API_AVAILABLE(ios(11.0));



// 邮件发送后返回结果的处理函数
- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(nullable NSError *)error;

三、MFMailComposeViewController 类的使用

-(void)btnClick
    // 判断是否可以发送邮件
    BOOL isSendEmail = [MFMailComposeViewController canSendMail];
    if (!isSendEmail) 
        // 不可发送邮件
        return ;
    
    // 创建对象
    MFMailComposeViewController * emailVc = [[MFMailComposeViewController alloc]init];
    // 设置邮件的代理
    emailVc.mailComposeDelegate = self;
    // 设置邮件的主题
    [emailVc setSubject:@"NetWork小贱"];
    
    // TODO: To、Cc、Bcc 的区别
    // To: 是发送给指定的某一个人。
    // Cc: 是 Carbon Copy 的缩写。是抄送的意思。收件人可以看到邮件还抄送给其他的那些人。
    // Bcc : 是 Blind Carbon Copy 的缩写。是秘密抄送的意思。收件人看不到还抄送了其他的那些人。
    // 设置发送单一指定邮件的接收人
    [emailVc setToRecipients:@[@"1542100658@qq.com"]];
    // 设置抄送人
    [emailVc setCcRecipients:@[@"1542100658@qq.com",@"zhoushaungjian@anyitou.com"]];
    // 设置密送人
    [emailVc setBccRecipients:@[@"zhoushaungjian511@163.com"]];
    // 设置邮件的内容,isHTML是是否将发送的消息转换成HTML的形式。
    [emailVc setMessageBody:@"千里江陵一日还,两岸猿声啼不住,轻舟已过万重山" isHTML:YES];
    // 设置邮件的附件
    NSString * filePath = [[NSBundle mainBundle] pathForResource:@"2" ofType:@"jpg"];
    [emailVc addAttachmentData:[NSData dataWithContentsOfFile:filePath] mimeType:@"jpg" fileName:@"2.jpg"];
    // 设置邮件的发送账户,如果没有账户则选择默认账户
    [emailVc setPreferredSendingEmailAddress:@"zhoushaungjian@anyitou.com"];
    // 调出界面
    [self presentViewController:emailVc animated:YES completion:nil];



四、邮件发送后返回结果处理
#pragma mark 邮件发送后结果处理代理
-(void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
    // 邮件发送结果的处理
    switch (result) 
            // 用户取消邮件发送
        case MFMailComposeResultCancelled:
            [self alertWithMessage:@"用户取消"];
        
            break;
            // 邮件保存草稿箱
        case MFMailComposeResultSaved:
            [self alertWithMessage:@"邮件已保存"];
        
            break;
            // 邮件发送成功
        case MFMailComposeResultSent:
            [self alertWithMessage:@"邮件发送成功"];
        
            break;
            // 邮件发送失败
        case MFMailComposeResultFailed:
            [self alertWithMessage:@"邮件发送失败"];
        
            break;

        default:
            break;
    
    // 清楚发送邮件的界面
    [controller dismissViewControllerAnimated:YES completion:nil];

// 消息提示(自动消失)
-(void)alertWithMessage:(NSString*)message 
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^
        UIAlertController * alertVc = [UIAlertController alertControllerWithTitle:nil message:message preferredStyle:UIAlertControllerStyleAlert];
        [self presentViewController:alertVc animated:YES completion:^
            [NSTimer scheduledTimerWithTimeInterval:3 repeats:NO block:^(NSTimer * _Nonnull timer) 
                [alertVc dismissViewControllerAnimated:YES completion:^
                    [timer invalidate];
                ];
            ];
        ];
    );


五、效果展示



















以上是关于App内邮件发送的主要内容,如果未能解决你的问题,请参考以下文章

从应用程序内通过电子邮件发送图像和文本

pythonWeb框架flask中使用blinker信号机制解耦业务代码解决ImportError: cannot import name 'app',以异步发送邮件为例

abap 给用户发送邮件或消息(系统内)

江陵:hibernate分页查询

应用内电子邮件将发送电子邮件但不会在 Xcode 中关闭

app里使用163邮箱发送邮件,被163认为是垃圾邮件的坑爹经历!_ !