Swift (iOS/macOS) 电子邮件发送:完全指南
发送电子邮件是现代移动和桌面应用程序的关键功能之一。在 Apple 平台(iOS、macOS、watchOS、tvOS)上,Swift 开发者可以使用多种方法:从内置的 MailComposeViewController 到直接与 SMTP 服务器配合使用的强大第三方库。在本文中,我们将分析在 Swift 中实现电子邮件发送的主要方法,包括实际代码示例、SMTP 配置以及附件处理。
为什么需要在应用程序中发送电子邮件?
电子邮件功能在各种场景中都非常有用:
- 注册和账户确认
- 发送错误报告和反馈
- 发送通知和新闻简报
- 发送收据、发票和文档
- 密码恢复
Swift 中发送电子邮件的方法
主要有两种方法:
- 内置邮件撰写 (MFMailComposeViewController) — 使用标准的 iOS/macOS 邮件应用程序。简单易用,但要求用户在邮件客户端中已登录。
- 通过 SMTP 直接发送 — 直接从服务器发送邮件,无需用户参与。非常适合自动通知。
方法 1:使用 MFMailComposeViewController
当需要让用户能够使用其个人邮箱从应用程序发送邮件时,此方法适用。
import UIKitimport MessageUI
class ViewController: UIViewController, MFMailComposeViewControllerDelegate { @IBAction func sendEmailTapped(_ sender: UIButton) { guard MFMailComposeViewController.canSendMail() else { print("邮件客户端未配置") return } let mailComposer = MFMailComposeViewController() mailComposer.mailComposeDelegate = self mailComposer.setToRecipients(["support@example.com"]) mailComposer.setSubject("来自应用程序的反馈") mailComposer.setMessageBody("您好!我有一个问题...", isHTML: false) // 添加附件 if let fileData = "示例文本".data(using: .utf8) { mailComposer.addAttachmentData(fileData, mimeType: "text/plain", fileName: "file.txt") } present(mailComposer, animated: true, completion: nil) } // MARK: - MFMailComposeViewControllerDelegate func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) { controller.dismiss(animated: true, completion: nil) switch result { case .sent: print("邮件已发送") case .saved: print("邮件已保存") case .cancelled: print("发送已取消") case .failed: print("发送失败:\\(error?.localizedDescription ?? "")") @unknown default: break } }}方法 2:通过 SMTP 直接发送 (SwiftSMTP)
为了在无需用户参与的情况下自动发送邮件,可以使用 SwiftSMTP 库。它允许连接到任何 SMTP 服务器(Gmail、Yandex、Mail.ru、自有服务器)。
通过 Swift Package Manager 安装:
// 在 Package.swift 中或通过 Xcode:File → Add Packagesdependencies: [ .package(url: "https://github.com/Kitura/Swift-SMTP.git", from: "2.0.0")]通过 SMTP 发送邮件的示例:
import SwiftSMTP
func sendEmail() { let smtp = SMTP( hostname: "smtp.gmail.com", // SMTP 服