【iOS】跳转邮箱发送邮件,支持系统内多个邮箱的方案 swift 实现
我们永远无法知道运行应用程序的iPhone / iPad是否安装了Apple的Mail应用程序,因为用户可以删除它。
一、前言
- 网上一般都让这么写
let email = "foo@bar.com"
if let url = URL(string: "mailto:\(email)") {UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
但是最好支持多个电子邮件客户端。下面的代码以更优雅的方式处理电子邮件发送。代码流为:
- 如果已安装Mail应用程序,请打开Mail的编辑器,并预先填充提供的数据
- 否则,请尝试依次打开Gmail应用,Outlook,Yahoo邮件和Spark。
- 如果未安装这些客户端,则回退为默认值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 实现相关推荐
- iOS跳转系统设置方法支持iOS7~iOS10+
iOS跳转系统设置方法支持iOS7~iOS10+ _array = @[@{@"系统设置":@"App-Prefs:root=INTERNET_TETHERING&quo ...
- Python连接qq邮箱服务器,调用qq邮箱发送邮件实战演示,qq邮箱授权码开通方法
直接用 python 自带的 smtplib 库和 email 库就能实现邮件的发送. qq 邮箱发送的话,直接用密码是登陆不了的,需要用授权码. import smtplib from email. ...
- python 用QQ邮箱发送邮件
SMTP 是发送邮件的协议.Python内置对SMTP的支持,可以发送纯文本邮件.HTML邮件以及带附件的邮箱. Python对SMTP支持有smtplib 和email 两个模块,email负责构造 ...
- 邮箱发送邮件(包含附件,网易、QQ)
效果图 代码 package com.mabo.email;import javax.activation.DataHandler; import javax.activation.DataSourc ...
- legend3---lavarel中使用qq邮箱发送邮件
legend3---lavarel中使用qq邮箱发送邮件 一.总结 一句话总结: 第一步:配置邮箱做服务器,比如qq邮箱,网易163邮箱 第二步:配置lavarel的配置文件 第三部:写邮件发送代码就 ...
- Java腾讯企业邮箱发送邮件
##Java通过腾讯企业邮箱发送邮件(多人发送) 企业邮箱需要使用ssl private static String account = "企业邮箱账户";// 登录账户priva ...
- python 发送邮件 163_python练习-使用163邮箱发送邮件
具体代码如下> #密码等敏感信息已经用****替换 import smtplib,sys from email.mime.text import MIMEText from email.head ...
- java发送QQ邮箱验证码实现登录注册、邮箱验证码防刷校验
文章目录 一:前台功能实现 1.1 页面编写 1.2 发送验证码--sendEmailCode 1.2.1 远程调用发送接口 1.2.1 接口防刷校验--60s内只能发送一次 二:获取QQ邮箱授权码 ...
- Python3实现向指定邮箱发送邮件(支持附件文件、图片等)
Background 最近业务需求需要把生成的月报定时发送到指定邮箱,直接在网上找了相关经验改巴改巴给实现了,测试可以直接使用,生产是我从MySQL数据库获取文件信息和邮箱等使用的,程序中的注释相当清 ...
最新文章
- git 建立一个私有模块
- ssh-keys git
- python中字典的find_python-re.findall返回命名捕获组的字典?
- java基础系列:集合总结(4)
- 如何成为一名入门级 iOS 开发者
- Microsoft.XMLHTTP 使用方式
- Jenkins Gitlab持续集成打包平台搭建
- echarts格式化tooltip数据
- 【算法】学习笔记(1):算法就是人类去教会计算机的方法
- Elasticsearch--springcloud整合 high-level-client-测试-保存数据---全文检索引擎ElasticSearch工作笔记024
- haproxy是如何工作的?
- SQL:两种获取时间类型日期部分的方法
- SQL基本语句(整理)
- Linux下安装配置maven
- jeeSite起步初始化数据库安装 (my.ini)
- golang base64解码碰到的坑
- 成都传智播客七月开班。你HOLD住了吗?
- Python|猜球博弈
- 可行性分析如何分析?
- 华为数字化转型之道 方法篇 第三章 数字化转型框架
热门文章
- 程序猿应该了解的内容以及程序猿如何强迫自己学习(算法篇)
- fullcalendar日历插件使用手册
- 做古风类视频剪辑,不用担心素材侵权问题,在家每天稳定200多
- ARC 123 D - Inc, Dec - Decomposition (思维构造+DP)
- 仿“唯品会”钓鱼网站分析
- GoodSync 同步 对比 备份
- 记一次drools比较隐晦的问题
- 基于JavaWeb的传染性疾病的了解与预防网站设计
- 苹果11蓝牙配对不成功怎么办_苹果手机和华为手机蓝牙配对不成功,怎么解决?...
- 安装GIT服务器 gitolite,及权限管理