当前位置: > > > Swift - 邮件发送功能的实现

Swift - 邮件发送功能的实现

(本文代码已升级至Swift3)

使用MessageUI.framework框架除了可以发送短信,还能发送Email,步骤如下:
(1)首先判断设备是否有发送邮件功能
(2)如果设备允许发送邮件,创建一个 MFMailComposeViewController 视图控制器,并对其设置邮件标题,正文内容,收件人,附件等。
(3)邮件发送后,会执行回调代理方法,可以获取发送结果(成功,失败或取消)

效果图如下:


代码如下:
import UIKit
import MessageUI

class ViewController: UIViewController ,UINavigationControllerDelegate,
MFMailComposeViewControllerDelegate{
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //首先要判断设备具不具备发送邮件功能
        if MFMailComposeViewController.canSendMail(){
            let controller = MFMailComposeViewController()
            //设置代理
            controller.mailComposeDelegate = self
            //设置主题
            controller.setSubject("我是邮件标题")
            //设置收件人
            controller.setToRecipients(["a1@hangge.com","a2@hangge.com"])
            //设置抄送人
            controller.setCcRecipients(["b1@hangge.com","b2@hangge.com"])
            //设置密送人
            controller.setBccRecipients(["c1@hangge.com","c2@hangge.com"])
            
            //添加图片附件
            let path = Bundle.main.path(forResource: "hangge.png", ofType: "")
            let url = URL(fileURLWithPath: path!)
            let myData = try! Data(contentsOf: url)
            controller.addAttachmentData(myData, mimeType: "image/png",
                                         fileName: "swift.png")
            
            //设置邮件正文内容(支持html)
            controller.setMessageBody("我是邮件正文", isHTML: false)
            
            //打开界面
            self.present(controller, animated: true, completion: nil)
        }else{
            print("本设备不能发送邮件")
        }
    }
    
    //发送邮件代理方法
    func mailComposeController(_ controller: MFMailComposeViewController,
                               didFinishWith result: MFMailComposeResult, error: Error?) {
        controller.dismiss(animated: true, completion: nil)
        
        switch result{
        case .sent:
            print("邮件已发送")
        case .cancelled:
            print("邮件已取消")
        case .saved:
            print("邮件已保存")
        case .failed:
            print("邮件发送失败")
        }
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}
评论2
  • 2楼
    2016-05-06 12:41
    玲玲

    fatal error: unexpectedly found nil while unwrapping an Optional value
    (lldb)
    出现这个错误是不是我的不支持邮件发送,我的是Xode7.1

    站长回复

    感觉像是你邮电里添加了附件,但这个附件文件有找不到。

  • 1楼
    2016-05-04 16:43
    玲玲

    switch result.value 这里报错了

    站长回复

    多谢提醒,这篇文章写的比较早,现在Swift语法有了变动所以报错了。

    现已修正,你可以再看下。