上一次写过一篇《SwiftUI使用MessageUI框架发送邮件》,我一直以为在应用中只能用MessageUI来发送邮件,其实也可以使用最简单的邮件发送方式,就是从你的应用中设置好发现邮件的标题、收件人邮箱地址等信息后,直接跳转到iOS的“邮件”应用中发送邮件。
iOS发送邮件
import SwiftUI
struct ContentView: View {
var body: some View {
Button("Send Feedback") {
sendEmail()
}
}
func sendEmail() {
let email = "fangjunyu.com@gmail.com"
let subject = "Feedback"
let body = "Hi fangjunyu,\n\n"
// URL 编码参数
let urlString = "mailto:\(email)?subject=\(subject)&body=\(body)"
.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
if let url = URL(string: urlString ?? "") {
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url)
} else {
// 处理无法打开邮件应用的情况
print("Cannot open Mail app.")
}
}
}
}
我们可以在我们的应用当中配置一个sendEmail函数,然后设置Button激活该函数后,iOS会将通过UIApplication.shared.open打开邮件应用。

当然,还有一点特殊性,比如当你的用户手机没有“邮件”应用时,可能就无法通过这个方式发送邮件。比如模拟器中没有“邮件”应用,那么你就需要考虑《使用SwiftUI发送》这种方式,在应用当中调取邮件功能发生邮件,而不是跳转到iOS的邮件应用当中。
macOS发送邮件
macOS和iOS有些特殊,macOS需要使用NSWorkspace实现发送邮件的功能:
func sendEmail() {
let email = "fangjunyu.com@gmail.com"
let subject = "ImageSlim"
let body = "Hi fangjunyu,\n\n"
// URL 编码参数
let urlString = "mailto:\(email)?subject=\(subject)&body=\(body)"
.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
if let url = URL(string: urlString ?? "") {
NSWorkspace.shared.open(url)
}
}
相关文章
1、SwiftUI使用MessageUI框架发送邮件:https://fangjunyu.com/2024/06/05/%E4%BD%BF%E7%94%A8swiftui%E5%8F%91%E9%80%81%E9%82%AE%E4%BB%B6/
2、macOS应用管理类NSWorkspace:https://fangjunyu.com/2025/06/22/macos%e5%ba%94%e7%94%a8%e7%ae%a1%e7%90%86%e7%b1%bbnsworkspace/