本文将演示如何使用 MessageUI 框架, 创建并发送一封带有附件的邮件.
使用邮件编辑视图控制器 (MFMailComposeViewController) 实现邮件功能.
在项目导航区, 打开视图控制器的代码文件[ViewController.swift]
- import UIKit
- // 导入需要使用的框架 MessageUI
- // 该框架为发送短信和邮件, 提供了具有标准组成接口的, 自定义的视图控制器
- import MessageUI
- // 添加邮件编辑视图控制器代理协议 MFMailComposeViewControllerDelegate,
- // 委托方法包含在该代理协议中.
- class ViewController: UIViewController, MFMailComposeViewControllerDelegate {
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do any additional setup after loading the view, typically from a nib.
- // 创建一个位置在 (40,80), 尺寸为(240,44) 的显示区域
- let rect = CGRect(x: 40, y: 80, width: 240, height: 44)
- // 初始化一个按钮控件, 并设置其位置和尺寸信息,
- // 当点击按钮时, 谈出邮件编辑窗口
- let button = UIButton(frame: rect)
- // 设置按钮在正常状态下的标题文字
- button.setTitle("Write a mail", for: UIControl.State())
- // 设置按钮的背景颜色为紫色
- button.backgroundColor = UIColor.purple
- // 给按钮绑定点击事件
- button.addTarget(self, action: #selector(ViewController.sendEmail),
- for: UIControl.Event.touchUpInside)
- // 将按钮添加到当前视图控制器的根视图
- self.view.addSubview(button)
- }
- // 创建一个方法, 用来响应按钮的点击事件
- @objc func sendEmail()
- {
- if(!MFMailComposeViewController.canSendMail())
- {
- print("提示用户需要在 [设置> 邮件] 页面添加邮箱账号.")
- return
- }
- // 初始化一个邮件视图控制器
- let mailBox = MFMailComposeViewController()
- // 创建一个数组, 用来设置收件人的邮箱
- let recipients = ["newsagency@163.com"]
- // 设置邮件发送到的目标邮箱
- mailBox.setToRecipients(recipients)
- // 设置邮件的标题文字
- mailBox.setSubject("Information!")
- // 创建一个字符串, 作为邮件的主题内容
- let message = "<font color='blue'>Hi, can you do me a favor</font>"
- // 邮件的内容支持网页代码格式
- mailBox.setMessageBody(message, ishtml: true)
- // 从项目中加载一张图片, 作为邮件的附件
- let attachedPic = UIImage(named: "Pic1.png")
- // 将图片的内容, 压缩并转化为二进制数据格式
- let imageData = attachedPic!.pngData()
- // 将转换格式后的数据对象, 作为邮件的附件
- mailBox.addAttachmentData(imageData!, mimeType: "", fileName:"Pic.png")
- // 设置邮件发送的监听代理对象, 为当前的视图控制器对象
- mailBox.mailComposeDelegate = self
- // 显示邮件的编辑视图
- self.present(mailBox, animated: true, completion: nil)
- }
- // 添加一个方法, 用来响应邮件发送的结果事件
- func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?)
- {
- // 遍历邮件的几种发送状态
- // 当用户取消邮件发送时
- if(result == MFMailComposeResult.cancelled)
- {
- print(">>>> MFMailComposeResultCancelled")
- }
- // 当邮件发送失败时
- else if(result == MFMailComposeResult.failed)
- {
- // 在控制台打印输出邮件发送失败的日志
- print(">>>> MFMailComposeResultFailed")
- }
- // 当邮件被成功保存时
- else if(result == MFMailComposeResult.saved)
- {
- // 在控制台打印输出邮件被成功保存的日志
- print(">>>> MFMailComposeResultSaved")
- }
- // 当邮件发送成功时
- else if(result == MFMailComposeResult.sent)
- {
- // 在控制台打印输出邮件发送成功的日志
- print(">>>> MFMailComposeResultSent")
- }
- // 发送邮件后, 关闭邮件视图控制器
- controller.dismiss(animated: true, completion: nil)
- }
- override func didReceiveMemoryWarning() {
- super.didReceiveMemoryWarning()
- // Dispose of any resources that can be recreated.
- }
- }
[Xcode10 实际操作]八, 网络与多线程 -(7)使用 MessageUI 框架, 创建并发送一封带有附件的邮件
来源: http://www.bubuko.com/infodetail-2870347.html