Envío de correo electrónico en Swift (iOS/macOS): bibliotecas y ejemplos prácticos
El envío de correos electrónicos es una de las funciones clave de muchas aplicaciones: desde el registro de usuarios y el restablecimiento de contraseñas hasta el envío de notificaciones y boletines de marketing. En el ecosistema Swift (iOS/macOS), existen varios enfoques para implementar esta tarea. En este artículo, revisaremos las principales bibliotecas, sus capacidades y proporcionaremos ejemplos de código listos para integrar.
Enfoques principales para enviar correo electrónico en Swift
Existen tres formas principales de enviar correos desde aplicaciones en Swift:
- Uso de
MFMailComposeViewController— interfaz del sistema integrada para enviar correos (solo iOS). Permite al usuario enviar un correo a través del cliente de correo instalado en el dispositivo, pero no es adecuado para el envío automático (del lado del servidor). - Conexión directa por SMTP — bibliotecas que implementan el protocolo SMTP del lado del cliente (por ejemplo,
SwiftSMTP). Adecuado para enviar correos directamente desde el dispositivo sin un servidor intermediario. - Uso de API de servicios de terceros — soluciones en la nube (Mailgun, SendGrid, Amazon SES) que proporcionan una API REST. Esta es la forma más confiable y escalable para aplicaciones en producción.
Biblioteca SwiftSMTP para conexión SMTP directa
SwiftSMTP es una biblioteca popular de código abierto que implementa un cliente SMTP en Swift. Soporta:
- Envío de correos en texto plano y HTML
- Archivos adjuntos (imágenes, PDF, archivos comprimidos)
- Soporte para TLS/SSL
- Autenticación por usuario/contraseña
Ejemplo de envío de un correo simple a través de Gmail SMTP:
import SwiftSMTP
let smtp = SMTP( host: "smtp.gmail.com", // Servidor SMTP port: 587, // Puerto para TLS username: "you@gmail.com", password: "your-app-password")
let mail = Mail( from: Mail.User(name: "Remitente", email: "you@gmail.com"), to: [Mail.User(name: "Destinatario", email: "recipient@example.com")], subject: "¡Hola desde Swift!", text: "Este es un correo de prueba enviado con SwiftSMTP.")
smtp.send(mail) { error in if let error = error { print("Error al enviar: \\(error)") } else { print("¡Correo enviado exitosamente!") }}Para trabajar con Gmail, necesitarás una contraseña de aplicación (App Password), ya que la contraseña normal no funciona con la autenticación de dos factores activada.
Envío de correo electrónico a través de Mailgun (API)
Mailgun es uno de los servicios más populares para el envío de correos transaccionales. Proporciona una API REST simple y un SDK para Swift. Principales ventajas:
- Alta capacidad de entrega (gracias a la reputación de las direcciones IP)
- Seguimiento de aperturas y clics
- Soporte para plantillas
Ejemplo de envío de correo a través de la API de Mailgun usando URLSession:
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": "Mi App <noreply@\\(domain)>", "to": recipient, "subject": subject, "text": body ] let bodyString = parameters También en la biblioteca
Criptografía en Go (Golang): cifrado y hashing
Pruebas en JavaScript (Node.js): frameworks y herramientas
CoreBluetooth Swift: guía completa con ejemplos prácticos
Rate Limiting en Swift: gestión de la frecuencia de solicitudes en iOS/macOS
Winston para JavaScript (Node.js): guía completa con ejemplos