Envio de email em Swift (iOS/macOS): guia completo
O envio de e-mails é uma das funções principais de aplicativos móveis e desktop modernos. No ecossistema Apple para Swift (iOS/macOS), existem duas abordagens principais: usar o controlador embutido MFMailComposeViewController para envio simples através do cliente de email do dispositivo e trabalhar com o protocolo SMTP através de bibliotecas de terceiros, como SwiftSMTP. Neste artigo, vamos detalhar ambos os métodos, suas vantagens, limitações e fornecer exemplos práticos de código.
1. Envio de email via MFMailComposeViewController
MFMailComposeViewController é um componente do framework MessageUI.framework que fornece uma interface pronta para criar e enviar um e-mail. Este método é ideal quando você precisa implementar rapidamente o envio sem configurar um servidor SMTP.
Vantagens e limitações
- Vantagens: não requer configuração de SMTP, suporta conteúdo HTML, anexos, usa automaticamente a conta de email configurada no dispositivo.
- Limitações: funciona apenas em dispositivos reais (não no simulador), requer uma conta de email configurada, não é adequado para envio em segundo plano sem interface do usuário.
Exemplo de implementação
Primeiro, importe o framework e implemente o delegate:
import UIKitimport MessageUI
class ViewController: UIViewController, MFMailComposeViewControllerDelegate {
@IBAction func sendEmailTapped(_ sender: UIButton) { guard MFMailComposeViewController.canSendMail() else { print("Email não configurado no dispositivo") return }
let mailComposer = MFMailComposeViewController() mailComposer.mailComposeDelegate = self mailComposer.setToRecipients(["recipient@example.com"]) mailComposer.setSubject("Olá do Swift!") mailComposer.setMessageBody("<h1>Email de teste</h1><p>Este é um conteúdo HTML.</p>", isHTML: true)
// Adicionar anexo if let fileData = "Arquivo de texto".data(using: .utf8) { mailComposer.addAttachmentData(fileData, mimeType: "text/plain", fileName: "example.txt") }
present(mailComposer, animated: true, completion: nil) }
// Delegate para processar o resultado func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) { switch result { case .cancelled: print("Envio cancelado") case .saved: print("Email salvo como rascunho") case .sent: print("Email enviado") case .failed: print("Erro no envio: \\(error?.localizedDescription ?? "desconhecido")") @unknown default: break } controller.dismiss(animated: true, completion: nil) }}2. Envio de email via SMTP com a biblioteca SwiftSMTP
Se você precisar enviar e-mails programaticamente, sem a intervenção do usuário (por exemplo, para e-mails de registro ou notificações), use o protocolo SMTP. Uma das bibliotecas populares para Swift é SwiftSMTP. Ela suporta TLS/SSL, autenticação e trabalho com anexos.
Instalação via Swift Package Manager
Adicione a dependência no Package.swift:
dependencies: [ .package(url: "https://github.com/Kitura/Swift-SMTP.git", from: "2.0.0")]Exemplo de envio via servidor SMTP do Gmail
import SwiftSMTP
func sendEmailViaSMTP() { let smtp = SMTP( hostname: "smtp.gmail.com", // Servidor SMTP email: "your-email@gmail.com", password: "your-app-passwo Também na biblioteca
Registro em Rust: visão geral das melhores bibliotecas e ferramentas
Migrações de banco de dados em C++: visão geral de ferramentas e bibliotecas
SwiftLint para Swift: guia completo com exemplos práticos
Play Services para Kotlin: guia completo com exemplos práticos
Trabalhando com Markdown em C# (.NET): bibliotecas e exemplos