Envio de Email em Swift (iOS/macOS): Guia Completo
O envio de e-mails é uma das funções-chave dos aplicativos móveis e desktop modernos. Nas plataformas Apple (iOS, macOS, watchOS, tvOS), os desenvolvedores em Swift podem usar várias abordagens: desde o embutido MailComposeViewController até poderosas bibliotecas de terceiros que trabalham diretamente com servidores SMTP. Neste artigo, vamos analisar as principais formas de implementar o envio de email em Swift, incluindo exemplos práticos de código, configuração de SMTP e trabalho com anexos.
Por que o envio de email é necessário no aplicativo?
A funcionalidade de email pode ser útil em vários cenários:
- Registro e confirmação de conta
- Envio de relatórios de erros e feedback
- Envio de notificações e novidades
- Envio de recibos, faturas e documentos
- Recuperação de senha
Formas de enviar email em Swift
Existem duas abordagens principais:
- Mail Compose embutido (MFMailComposeViewController) — usa o aplicativo de email padrão do iOS/macOS. Simples, mas exige que o usuário esteja autenticado no cliente de email.
- Envio direto via SMTP — envia e-mails diretamente do servidor, sem a participação do usuário. Ideal para notificações automáticas.
Método 1: Usando MFMailComposeViewController
Este método é adequado quando você precisa dar ao usuário a capacidade de enviar um email do aplicativo usando sua própria caixa de correio.
import UIKitimport MessageUI
class ViewController: UIViewController, MFMailComposeViewControllerDelegate { @IBAction func sendEmailTapped(_ sender: UIButton) { guard MFMailComposeViewController.canSendMail() else { print("Cliente de email não configurado") return } let mailComposer = MFMailComposeViewController() mailComposer.mailComposeDelegate = self mailComposer.setToRecipients(["support@example.com"]) mailComposer.setSubject("Feedback do aplicativo") mailComposer.setMessageBody("Olá! Eu tenho uma pergunta...", isHTML: false) // Adicionar anexo if let fileData = "Texto de exemplo".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("Email enviado") case .saved: print("Email salvo") case .cancelled: print("Envio cancelado") case .failed: print("Erro ao enviar: \\(error?.localizedDescription ?? "")") @unknown default: break } }}Método 2: Envio direto via SMTP (SwiftSMTP)
Para o envio automático de e-mails sem a participação do usuário, utiliza-se a biblioteca SwiftSMTP. Ela permite conectar-se a qualquer servidor SMTP (Gmail, Yandex, Mail.ru, servidor próprio).
Instalação via Swift Package Manager:
// Em Package.swift ou via Xcode: File → Add Packagesdependencies: [ .package(url: "https://github.com/Kitura/Swift-SMTP.git", from: "2.0.0")]Exemplo de envio de email via SMTP:
import SwiftSMTP
func sendEmail() { let smtp = SMTP( hostname: "smtp.gmail.com", // SMTP s