为iOS程序添加Mail功能

开发iOS程序时,常常会用到邮件发送功能。

方法1:用打开链接的方式,调用系统的Mail程序发送

{% codeblock lang:swift %} let email = "mailto:foo@example.com?cc=bar@example.com&subject=Greetings%20from%20Cupertino!&body=Wish%20you%20were%20here!"

var url:NSURL? = NSURL(string: email)

UIApplication.sharedApplication().openURL(url!)

{% endcodeblock %}

这种link方式代码比较简单。但是内容中遇到空格需要用%20转义。

注意link方式需要调用Mail程序。iOS 模拟器中没有Mail程序,要在真机中测试。

把maillink换成其他link。就可以调用电话,FaceTime,短信等程序。 {% codeblock lang:swift %} // Native app URL string: tel:1-408-555-5555
facetime://user@example.com
sms:1-408-555-1212
http://maps.apple.com/?q=cupertino
http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?i=156093464&id=156093462&s=143441
http://www.youtube.com/v/VIDEO_IDENTIFIER
{% endcodeblock %}

方法2:用 MFMailComposeViewController 实现

{% codeblock lang:swift %} let recipients = ["foo@example.com"]
let subject = "User Feedback"
let supportText = "Please write your feedback here.\n\n\n\n"
let supportBody = supportText + "iOS Version: (iOSVersion)\nDevice: (model)"

let mailComposer = MFMailComposeViewController()
mailComposer.mailComposeDelegate = self
mailComposer.setToRecipients(recipients)
mailComposer.setSubject(subject)
mailComposer.setMessageBody(supportBody, isHTML: false)

// 如果没有在设备上登录邮箱,无法建立ViewController导致程序奔溃

if MFMailComposeViewController.canSendMail() {
self.presentViewController(mailComposer, animated: true, completion: nil) } else { return } {% endcodeblock %}

这种方法是以NavigationController的形式,在程序内部完成。而且空格不需要特殊处理。推荐使用。

Neil Wang

产品经理。喜欢摄影,滑板,电影。微信公众号:NeilOnly