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


    目录:[Swift]Xcode实际操作

    本文将演示如何使用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 }
  • 相关阅读:
    机器学习(04)——常用专业术语
    C# 线程同步的三类情景
    线程同步的情景之三
    线程同步的情景之二
    线程同步的情景之一
    Thread.Sleep(0) vs Sleep(1) vs Yeild
    Visual Studio 实用扩展推荐
    为革命保护视力 --- 给 Visual Studio 换颜色
    免费的精品: Productivity Power Tools 动画演示
    如何扩展 Visual Studio 编辑器
  • 原文地址:https://www.cnblogs.com/strengthen/p/10055392.html
Copyright © 2020-2023  润新知