Envío de correo electrónico en Swift: bibliotecas y ejemplos para iOS/macOS

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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

Recommendations