[Xcode10 实际操作]八、网络与多线程-(7)使用MessageUI框架,创建并发送一封带有附件的邮件

本文将演示如何使用MessageUI框架,创建并发送一封带有附件的邮件。

使用邮件编辑视图控制器(MFMailComposeViewController)实现邮件功能。

在项目导航区,打开视图控制器的代码文件【ViewController.swift】

  1 import UIKit
  2 //导入需要使用的框架MessageUI
  3 //该框架为发送短信和邮件,提供了具有标准组成接口的、自定义的视图控制器
  4 import MessageUI
  5 
  6 //添加邮件编辑视图控制器代理协议MFMailComposeViewControllerDelegate,
  7 //委托方法包含在该代理协议中。
  8 class ViewController: UIViewController, MFMailComposeViewControllerDelegate {
  9     
 10     override func viewDidLoad() {
 11         super.viewDidLoad()
 12         // Do any additional setup after loading the view, typically from a nib.
 13         
 14         //创建一个位置在(40,80),尺寸为(240,44)的显示区域
 15         let rect = CGRect(x: 40, y: 80, width: 240, height: 44)
 16         //初始化一个按钮控件,并设置其位置和尺寸信息,
 17         //当点击按钮时,谈出邮件编辑窗口
 18         let button = UIButton(frame: rect)
 19         //设置按钮在正常状态下的标题文字
 20         button.setTitle("Write a mail", for: UIControl.State())
 21         //设置按钮的背景颜色为紫色
 22         button.backgroundColor = UIColor.purple
 23         //给按钮绑定点击事件
 24         button.addTarget(self, action: #selector(ViewController.sendEmail), 
 25         for: UIControl.Event.touchUpInside)
 26         //将按钮添加到当前视图控制器的根视图
 27         self.view.addSubview(button)
 28     }
 29     
 30     //创建一个方法,用来响应按钮的点击事件
 31     @objc func sendEmail()
 32     {
 33         if(!MFMailComposeViewController.canSendMail())
 34         {
 35             print("提示用户需要在[设置 > 邮件]页面添加邮箱账号。")
 36             return
 37         }
 38         //初始化一个邮件视图控制器
 39         let mailBox = MFMailComposeViewController()
 40         //创建一个数组,用来设置收件人的邮箱
 41         let recipients = ["[email protected]"]
 42         //设置邮件发送到的目标邮箱
 43         mailBox.setToRecipients(recipients)
 44         //设置邮件的标题文字
 45         mailBox.setSubject("Information!")
 46         
 47         //创建一个字符串,作为邮件的主题内容
 48         let message = "<font color='blue'>Hi, can you do me a favor</font>"
 49         //邮件的内容支持网页代码格式
 50         mailBox.setMessageBody(message, isHTML: true)
 51         
 52         //从项目中加载一张图片,作为邮件的附件
 53         let attachedPic = UIImage(named: "Pic1.png")
 54         //将图片的内容,压缩并转化为二进制数据格式
 55         let imageData = attachedPic!.pngData()
 56         //将转换格式后的数据对象,作为邮件的附件
 57         mailBox.addAttachmentData(imageData!, mimeType: "", fileName: "Pic.png")
 58         
 59         //设置邮件发送的监听代理对象,为当前的视图控制器对象
 60         mailBox.mailComposeDelegate = self
 61         //显示邮件的编辑视图
 62         self.present(mailBox, animated: true, completion: nil)
 63     }
 64     
 65     //添加一个方法,用来响应邮件发送的结果事件
 66     func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?)
 67     {
 68         //遍历邮件的几种发送状态
 69 
 70         //当用户取消邮件发送时
 71         if(result == MFMailComposeResult.cancelled)
 72         {
 73             print(">>>> MFMailComposeResultCancelled")
 74         }
 75         //当邮件发送失败时
 76         else if(result == MFMailComposeResult.failed)
 77         {
 78             //在控制台打印输出邮件发送失败的日志
 79             print(">>>> MFMailComposeResultFailed")
 80         }
 81         //当邮件被成功保存时
 82         else if(result == MFMailComposeResult.saved)
 83         {
 84             //在控制台打印输出邮件被成功保存的日志
 85             print(">>>> MFMailComposeResultSaved")
 86         }
 87         //当邮件发送成功时
 88         else if(result == MFMailComposeResult.sent)
 89         {
 90             //在控制台打印输出邮件发送成功的日志
 91             print(">>>> MFMailComposeResultSent")
 92         }
 93         //发送邮件后,关闭邮件视图控制器
 94         controller.dismiss(animated: true, completion: nil)
 95     }
 96     
 97     override func didReceiveMemoryWarning() {
 98         super.didReceiveMemoryWarning()
 99         // Dispose of any resources that can be recreated.
100     }
101 }

猜你喜欢

转载自www.cnblogs.com/strengthen/p/10055392.html