Envio de email em Swift (iOS/macOS): MFMailComposeViewController e SMTP

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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

Recommendations