在 iOS 开发中实现发送邮件的需求是比较简单的,本文主要提供两种方案:
MessageUI
中提供的 MFMailComposeViewController
来在应用内显示邮件编辑页面;mailto
协议来启动 iOS 系统中的邮件应用;Ficow 建议您使用第一种方案,因为它可以让您很轻易地自定义邮件的内容,比如:邮件的主题、收件人列表、抄送收件人列表、正文文本内容、正文附件等等。
请直接看代码:
import MessageUI // 首先导入 MessageUI 库
final class ViewController: UIViewController {
func showEmailPage() {
let mailComposerVC = MFMailComposeViewController()
let recipients = ["ficowshen@hotmail.com"]
mailComposerVC.setToRecipients(recipients)
mailComposerVC.setSubject("Email to Ficow Shen")
let body = """
Hello, Ficow Shen!
This is the body of the test email~
"""
mailComposerVC.setMessageBody(body, isHTML: false)
mailComposerVC.mailComposeDelegate = self // 需要遵循 MFMailComposeViewControllerDelegate 协议
present(mailComposerVC, animated: animated, completion: nil)
}
}
另外,您还需要让 ViewController
遵循 MFMailComposeViewControllerDelegate
协议,因为 self
被赋给了 MFMailComposeViewController
实例的 mailComposeDelegate
属性。这个协议提供的回调方法,主要用于隐藏邮件编辑页面以及展示可能出现的错误。
extension ViewController: MFMailComposeViewControllerDelegate {
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
controller.dismiss(animated: true, completion: nil)
if let error = error {
// 处理错误信息
}
}
}
由于某些原因,MFMailComposeViewController
可能无法发送邮件(比如:用户尚未配置发送邮件的邮箱帐号)。所以在显示 MFMailComposeViewController
到屏幕之前,您必须先检查 MFMailComposeViewController.canSendMail()
的返回值是否为 true
。
如果,MFMailComposeViewController.canSendMail()
返回的值为 false
,您可以告知用户去配置邮箱帐号。或者,您可以在这种情况下使用 mailto
方案。
采用 mailto
方案的实现非常简单,您只需要构建一个包含邮箱地址的 URL 即可:
let email = "ficowshen@hotmail.com"
if let url = URL(string: "mailto:\(email)") {
UIApplication.shared.open(url)
} else {
fatalError("Invalid mailto URL!")
}
如果需要发送给多个收件人,您就需要这样配置(%2C
是英文逗号通过百分号编码之后的格式):
let recipients = ["aaa@qq.com","bbb@qq.com"]
if let url = URL(string: "mailto:\(recipients.joined(separator: "%2C"))") {
UIApplication.shared.open(url)
} else {
fatalError("Invalid mailto URL!")
}
如果您需要定制抄送收件人、邮件主题、正文文本等参数,您就需要这样配置(%20
就是空格通过百分号编码之后的格式):
let email = "ficowshen@hotmail.com?cc=aaa@qq.com&subject=Email%20Subject&body=This%20is%20body"
if let url = URL(string: "mailto:\(email)") {
UIApplication.shared.open(url)
} else {
fatalError("Invalid mailto URL!")
}
相对来说,MFMailComposeViewController
更加易用。而且,它允许您在应用内展示邮件编辑页面,而不是像 mailto
那样跳转到应用外部。Ficow 建议您在 MFMailComposeViewController
方案不可用的情况下再采用 mailto
方案。
以上就是本文的全部内容,希望对您有所帮助。如果您还有其他的可行方案,欢迎您给 Ficow 留言哈~
参考内容:
Apple URL Scheme Reference - Mail Links
觉得不错?点个赞呗~
本文链接:iOS 应用通过 MFMailComposeViewController 或 mailto 来发送邮件
转载声明:本站文章如无特别说明,皆为原创。转载请注明:Ficow Shen's Blog