Envío de Email en Swift: Guía Completa sobre SMTP y MailKit

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 Email en Swift (iOS/macOS): Guía Completa

El envío de correos electrónicos es una de las funciones clave de las aplicaciones móviles y de escritorio modernas. En las plataformas de Apple (iOS, macOS, watchOS, tvOS), los desarrolladores en Swift pueden usar varios enfoques: desde el integrado MailComposeViewController hasta potentes bibliotecas de terceros que trabajan directamente con servidores SMTP. En este artículo, analizaremos las principales formas de implementar el envío de email en Swift, incluyendo ejemplos prácticos de código, configuración de SMTP y trabajo con archivos adjuntos.



¿Por qué es necesario el envío de email en una aplicación?

La funcionalidad de email puede ser útil en diversos escenarios:

  • Registro y confirmación de cuenta
  • Envío de informes de errores y comentarios
  • Distribución de notificaciones y novedades
  • Envío de recibos, facturas y documentos
  • Restablecimiento de contraseña


Formas de enviar email en Swift

Existen dos enfoques principales:

  • Mail Compose integrado (MFMailComposeViewController) — utiliza la aplicación de correo estándar de iOS/macOS. Simple, pero requiere que el usuario esté autenticado en el cliente de correo.
  • Envío directo a través de SMTP — envía correos directamente desde el servidor, sin intervención del usuario. Ideal para notificaciones automáticas.


Método 1: Uso de MFMailComposeViewController

Este método es adecuado cuando se necesita dar al usuario la posibilidad de enviar un correo desde la aplicación, utilizando su propia bandeja de correo personal.

import UIKitimport MessageUI

class ViewController: UIViewController, MFMailComposeViewControllerDelegate { @IBAction func sendEmailTapped(_ sender: UIButton) { guard MFMailComposeViewController.canSendMail() else { print("El cliente de correo no está configurado") return } let mailComposer = MFMailComposeViewController() mailComposer.mailComposeDelegate = self mailComposer.setToRecipients(["support@example.com"]) mailComposer.setSubject("Comentarios desde la aplicación") mailComposer.setMessageBody("¡Hola! Tengo una pregunta...", isHTML: false) // Agregar archivo adjunto if let fileData = "Texto de ejemplo".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("Correo enviado") case .saved: print("Correo guardado") case .cancelled: print("Envío cancelado") case .failed: print("Error al enviar: \\(error?.localizedDescription ?? "")") @unknown default: break } }}


Método 2: Envío directo a través de SMTP (SwiftSMTP)

Para el envío automático de correos sin intervención del usuario, se utiliza la biblioteca SwiftSMTP. Permite conectarse a cualquier servidor SMTP (Gmail, Yandex, Mail.ru, servidor propio).



Instalación mediante Swift Package Manager:

// En Package.swift o a través de Xcode: File → Add Packagesdependencies: [    .package(url: "https://github.com/Kitura/Swift-SMTP.git", from: "2.0.0")]


Ejemplo de envío de correo a través de SMTP:

import SwiftSMTP

func sendEmail() { let smtp = SMTP( hostname: "smtp.gmail.com", // Servidor SMTP

Recommendations