在Swift中发送电子邮件:iOS/macOS的库和示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Swift (iOS/macOS) 电子邮件发送:库和实际示例



发送电子邮件是许多应用程序的关键功能之一:从用户注册和密码重置到发送通知和营销邮件。在Swift(iOS/macOS)生态系统中,有几种方法可以实现此任务。在本文中,我们将介绍主要的库、它们的功能,并提供现成的代码示例以供集成。



在Swift中发送电子邮件的主要方法



从Swift应用程序发送电子邮件主要有三种方法:

  • 使用 MFMailComposeViewController — 用于发送电子邮件的内置系统界面(仅限iOS)。允许用户通过设备上安装的邮件客户端发送电子邮件,但不适用于自动(服务器端)发送。
  • 直接SMTP连接 — 在客户端实现SMTP协议的库(例如 SwiftSMTP)。适用于无需中间服务器直接从设备发送电子邮件。
  • 使用第三方服务的API — 提供REST API的云解决方案(Mailgun、SendGrid、Amazon SES)。这是生产应用程序最可靠且可扩展的方式。


用于直接SMTP连接的SwiftSMTP库



SwiftSMTP 是一个流行的开源库,在Swift中实现了SMTP客户端。它支持:

  • 发送文本和HTML电子邮件
  • 附件(图片、PDF、压缩文件)
  • 支持TLS/SSL
  • 通过用户名/密码进行身份验证


通过Gmail SMTP发送简单电子邮件的示例:



import SwiftSMTP

let smtp = SMTP( host: "smtp.gmail.com", // SMTP服务器 port: 587, // TLS端口 username: "you@gmail.com", password: "your-app-password")

let mail = Mail( from: Mail.User(name: "发件人", email: "you@gmail.com"), to: [Mail.User(name: "收件人", email: "recipient@example.com")], subject: "来自Swift的问候!", text: "这是使用SwiftSMTP发送的测试邮件。")

smtp.send(mail) { error in if let error = error { print("发送错误:\\(error)") } else { print("邮件发送成功!") }}


使用Gmail时,需要应用密码(App Password),因为启用双因素身份验证后,普通密码不适用。



通过Mailgun (API) 发送电子邮件



Mailgun 是用于发送事务性电子邮件的最流行服务之一。它提供简单的REST API和Swift SDK。主要优势:

  • 高送达率(得益于IP地址声誉)
  • 跟踪打开和点击
  • 支持模板


使用 URLSession 通过Mailgun API发送电子邮件的示例:



import Foundation

func sendEmailViaMailgun(to recipient: String, subject: String, body: String) { let apiKey = "YOUR_MAILGUN_API_KEY" let domain = "YOUR_DOMAIN.mailgun.org" let urlString = "https://api.mailgun.net/v3/\\(domain)/messages" guard let url = URL(string: urlString) else { return } var request = URLRequest(url: url) request.httpMethod = "POST" let credentials = "api:\\(apiKey)" let authData = credentials.data(using: .utf8)!.base64EncodedString() request.setValue("Basic \\(authData)", forHTTPHeaderField: "Authorization") request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") let parameters = [ "from": "我的应用 <noreply@\\(domain)>", "to": recipient, "subject": subject, "text": body ] let bodyString = parameters

推荐