Swift - 邮件发送功能的实现
作者:hangge | 2015-07-17 10:38
(本文代码已升级至Swift3)
使用MessageUI.framework框架除了可以发送短信,还能发送Email,步骤如下:

使用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)
fatal error: unexpectedly found nil while unwrapping an Optional value
(lldb)
出现这个错误是不是我的不支持邮件发送,我的是Xode7.1
站长回复:感觉像是你邮电里添加了附件,但这个附件文件有找不到。
switch result.value 这里报错了
站长回复:多谢提醒,这篇文章写的比较早,现在Swift语法有了变动所以报错了。