我们永远无法知道运行应用程序的iPhone / iPad是否安装了Apple的Mail应用程序,因为用户可以删除它。

一、前言

  • 网上一般都让这么写
let email = "foo@bar.com"
if let url = URL(string: "mailto:\(email)") {UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
  • 但是最好支持多个电子邮件客户端。下面的代码以更优雅的方式处理电子邮件发送。代码流为:

    1. 如果已安装Mail应用程序,请打开Mail的编辑器,并预先填充提供的数据
    2. 否则,请尝试依次打开Gmail应用,Outlook,Yahoo邮件和Spark。
    3. 如果未安装这些客户端,则回退为默认值mailto:…,提示用户安装Apple的Mail应用程序。

二、方案(代码,大家 cv 时求个赞)

  • 代码是用Swift 5编写的:
    import MessageUIimport UIKitclass SendEmailViewController: UIViewController, MFMailComposeViewControllerDelegate {@IBAction func sendEmail(_ sender: UIButton) {// Modify following variables with your text / recipientlet recipientEmail = "test@email.com"let subject = "Multi client email support"let body = "This code supports sending email via multiple different email apps on iOS! :)"// Show default mail composerif MFMailComposeViewController.canSendMail() {let mail = MFMailComposeViewController()mail.mailComposeDelegate = selfmail.setToRecipients([recipientEmail])mail.setSubject(subject)mail.setMessageBody(body, isHTML: false)present(mail, animated: true)// Show third party email composer if default Mail app is not present} else if let emailUrl = createEmailUrl(to: recipientEmail, subject: subject, body: body) {UIApplication.shared.open(emailUrl)}}private func createEmailUrl(to: String, subject: String, body: String) -> URL? {let subjectEncoded = subject.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!let bodyEncoded = body.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!let gmailUrl = URL(string: "googlegmail://co?to=\(to)&subject=\(subjectEncoded)&body=\(bodyEncoded)")let outlookUrl = URL(string: "ms-outlook://compose?to=\(to)&subject=\(subjectEncoded)")let yahooMail = URL(string: "ymail://mail/compose?to=\(to)&subject=\(subjectEncoded)&body=\(bodyEncoded)")let sparkUrl = URL(string: "readdle-spark://compose?recipient=\(to)&subject=\(subjectEncoded)&body=\(bodyEncoded)")let defaultUrl = URL(string: "mailto:\(to)?subject=\(subjectEncoded)&body=\(bodyEncoded)")if let gmailUrl = gmailUrl, UIApplication.shared.canOpenURL(gmailUrl) {return gmailUrl} else if let outlookUrl = outlookUrl, UIApplication.shared.canOpenURL(outlookUrl) {return outlookUrl} else if let yahooMail = yahooMail, UIApplication.shared.canOpenURL(yahooMail) {return yahooMail} else if let sparkUrl = sparkUrl, UIApplication.shared.canOpenURL(sparkUrl) {return sparkUrl}return defaultUrl}func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {controller.dismiss(animated: true)}}
  • 请注意,我故意错过了Outlook应用的正文,因为它无法解析它。
  • 您还必须向Info.plist文件添加以下代码,该文件将使用的UR1查询方案列入白名单。
<key>LSApplicationQueriesSchemes</key>
<array><string>googlegmail</string><string>ms-outlook</string><string>readdle-spark</string><string>ymail</string>
</array>

三、结语

  • 如果回答对你有帮助求个赞呗 ~

【iOS】跳转邮箱发送邮件,支持系统内多个邮箱的方案 swift 实现相关推荐

  1. iOS跳转系统设置方法支持iOS7~iOS10+

    iOS跳转系统设置方法支持iOS7~iOS10+ _array = @[@{@"系统设置":@"App-Prefs:root=INTERNET_TETHERING&quo ...

  2. Python连接qq邮箱服务器,调用qq邮箱发送邮件实战演示,qq邮箱授权码开通方法

    直接用 python 自带的 smtplib 库和 email 库就能实现邮件的发送. qq 邮箱发送的话,直接用密码是登陆不了的,需要用授权码. import smtplib from email. ...

  3. python 用QQ邮箱发送邮件

    SMTP 是发送邮件的协议.Python内置对SMTP的支持,可以发送纯文本邮件.HTML邮件以及带附件的邮箱. Python对SMTP支持有smtplib 和email 两个模块,email负责构造 ...

  4. 邮箱发送邮件(包含附件,网易、QQ)

    效果图 代码 package com.mabo.email;import javax.activation.DataHandler; import javax.activation.DataSourc ...

  5. legend3---lavarel中使用qq邮箱发送邮件

    legend3---lavarel中使用qq邮箱发送邮件 一.总结 一句话总结: 第一步:配置邮箱做服务器,比如qq邮箱,网易163邮箱 第二步:配置lavarel的配置文件 第三部:写邮件发送代码就 ...

  6. Java腾讯企业邮箱发送邮件

    ##Java通过腾讯企业邮箱发送邮件(多人发送) 企业邮箱需要使用ssl private static String account = "企业邮箱账户";// 登录账户priva ...

  7. python 发送邮件 163_python练习-使用163邮箱发送邮件

    具体代码如下> #密码等敏感信息已经用****替换 import smtplib,sys from email.mime.text import MIMEText from email.head ...

  8. java发送QQ邮箱验证码实现登录注册、邮箱验证码防刷校验

    文章目录 一:前台功能实现 1.1 页面编写 1.2 发送验证码--sendEmailCode 1.2.1 远程调用发送接口 1.2.1 接口防刷校验--60s内只能发送一次 二:获取QQ邮箱授权码 ...

  9. Python3实现向指定邮箱发送邮件(支持附件文件、图片等)

    Background 最近业务需求需要把生成的月报定时发送到指定邮箱,直接在网上找了相关经验改巴改巴给实现了,测试可以直接使用,生产是我从MySQL数据库获取文件信息和邮箱等使用的,程序中的注释相当清 ...

最新文章

  1. git 建立一个私有模块
  2. ssh-keys git
  3. python中字典的find_python-re.findall返回命名捕获组的字典?
  4. java基础系列:集合总结(4)
  5. 如何成为一名入门级 iOS 开发者
  6. Microsoft.XMLHTTP 使用方式
  7. Jenkins Gitlab持续集成打包平台搭建
  8. echarts格式化tooltip数据
  9. 【算法】学习笔记(1):算法就是人类去教会计算机的方法
  10. Elasticsearch--springcloud整合 high-level-client-测试-保存数据---全文检索引擎ElasticSearch工作笔记024
  11. haproxy是如何工作的?
  12. SQL:两种获取时间类型日期部分的方法
  13. SQL基本语句(整理)
  14. Linux下安装配置maven
  15. jeeSite起步初始化数据库安装 (my.ini)
  16. golang base64解码碰到的坑
  17. 成都传智播客七月开班。你HOLD住了吗?
  18. Python|猜球博弈
  19. 可行性分析如何分析?
  20. 华为数字化转型之道 方法篇 第三章 数字化转型框架

热门文章

  1. 程序猿应该了解的内容以及程序猿如何强迫自己学习(算法篇)
  2. fullcalendar日历插件使用手册
  3. 做古风类视频剪辑,不用担心素材侵权问题,在家每天稳定200多
  4. ARC 123 D - Inc, Dec - Decomposition (思维构造+DP)
  5. 仿“唯品会”钓鱼网站分析
  6. GoodSync 同步 对比 备份
  7. 记一次drools比较隐晦的问题
  8. 基于JavaWeb的传染性疾病的了解与预防网站设计
  9. 苹果11蓝牙配对不成功怎么办_苹果手机和华为手机蓝牙配对不成功,怎么解决?...
  10. 安装GIT服务器 gitolite,及权限管理