本文将演示如何使用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, 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 = ["newsagency@163.com"] 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 }