• iOS 调用系统邮件,上传pdf、doc等附件


    MFMailComposeViewController是iOS内置的写邮件控制器,可以在自己的应用中调用该控制器实现写邮件,还能上传附件,并能通过代理MFMailComposeViewControllerDelegate的方法返回到自己的应用中。
    只要通过设置附件的文件名字和mimeType,便可以从bundle中读取各种html所支持mimeType文件类型,作为附件上传。使用NSData dataWithContentsOfFile:方法将这些文件转为NSData即可。
    步骤:
    1.新建MFMailComposeViewController的对象,设置其代理为另一控制器。

      if (mailController == nil) {

            mailController = [[MFMailComposeViewController alloc]init];

            mailController.mailComposeDelegate = self;}

    2.使代理控制器遵循协议。并实现代理方法。

    @interface ViewController : UIViewController<MFMailComposeViewControllerDelegate>

    3.判断当前设备是否支持邮件发送:[MFMailComposeViewController canSendMail]

    4.如果支持,则可以使用如下方法设置发件人,转发人,附件等。

    -(void)sendMailWithEnclosure:(UIButton*)sender

    {

          UIButton *btn = sender;

        NSString *name = nil;

        NSString *mimeType = nil;

        

        if (btn.tag == 10) {

            name =@"pdf附件.pdf";

            mimeType =@"application/pdf";

        }else if(btn.tag == 20){

            name =@"pages附件.doc";

            mimeType =@"application/msword";

        }

        if ([MFMailComposeViewControllercanSendMail]) {

            [mailControllersetSubject:@"测试邮件发送附件"];

            [mailControllersetToRecipients:[NSArrayarrayWithObjects:@"ouyang****@163.com", nil]];

            [mailControllersetMessageBody:@"Test SendMailWithEnclosure!"isHTML:NO];

            

            NSString *path = [[NSBundlemainBundle] bundlePath];

            NSString *finalPath = [path stringByAppendingPathComponent:name];

            NSData *Data = [NSDatadataWithContentsOfFile:finalPath];

            

            //发送文件的NSData,类型,附件名

            [mailController addAttachmentData:Data mimeType:mimeType fileName:name];

            NSLog(@"%@,%@",mimeType,name);

            

           [self presentViewController:mailController animated:YES completion:nil];

            //把当前controller变为mailcontroller

        }

    }

    5.代理方法中对邮件发送结果进行判断:

     #pragma mark -MFMailComposeViewControllerDelegate

     - (void)mailComposeController:(MFMailComposeViewController*)controller

              didFinishWithResult:(MFMailComposeResult)result

                            error:(NSError*)error

    {

        NSString *resultString = nil;

        switch (result){

                

            caseMFMailComposeResultCancelled:

                resultString = [NSString stringWithFormat:@"Mail send canceled…"];

                

                break;

                

            caseMFMailComposeResultSaved:

                resultString = [NSString stringWithFormat:@"Mail saved…"];

                

                break;

                

            caseMFMailComposeResultSent:

                resultString = [NSString stringWithFormat:@"Mail sent out…"];

                

                break;

                

            caseMFMailComposeResultFailed:

                resultString = [NSStringstringWithFormat:@"%@", [error localizedDescription]];

                

                break;

                

            default:

                break;

                

        }

        

        UIAlertView *alert = [[UIAlertViewalloc]initWithTitle:@"提示"message:resultString delegate:selfcancelButtonTitle:@"取消"otherButtonTitles:nil];

        [alert show];

        [self dismissViewControllerAnimated:YES completion:nil];

        mailController = nil;

    }

    注意:
    1.真机才支持发送邮件,模拟器会模拟邮件的发送,但是收件人收不到邮件。
    2.MFMailComposeViewController的父类是UINavigationController,所以在展示UINavigationController的控制器时,不能使用导航控制器的push和pop方法展示MFMailComposeViewController的对象。
    3.使用mailto发送邮件,无法通过代理方法直接返回自己的应用。

        

        mailto四个常用的参数

        subject -- 代表邮件的标题

        body -- 代表邮件的内容

        cc -- 代表一个抄送对象

        bcc -- 代表一个暗送对象

    拼接方法:

        NSString*urlString =@"mailto:abc@example.com?cc=cde@example.com&subject=Greetings!&body=Wishes!";

        [[UIApplicationsharedApplication] openURL:[NSURLURLWithString:urlString]];

     4.MIME type格式查询:
      http://www.freeformatter.com/mime-types-list.html
  • 相关阅读:
    (转)Tomcat7+Redis存储Session
    (转)Nginx SSL+tomcat集群,request.getScheme() 取到https正确的协议
    Oracle行转列、列转行的Sql语句总结(转)
    http升https笔记
    quartz 线程问题
    SQL语句汇总
    IDEA 入坑
    ssm 配置文件intit
    黑马-springMvC 运行加载顺序
    实训--git 好文
  • 原文地址:https://www.cnblogs.com/iOS-Girl/p/iOS_Mail.html
Copyright © 2020-2023  润新知