Envoi d'email en Swift (iOS/macOS) : guide complet
L'envoi d'emails est l'une des fonctions clés des applications mobiles et de bureau modernes. Dans l'écosystème Apple pour Swift (iOS/macOS), il existe deux approches principales : l'utilisation du contrôleur intégré MFMailComposeViewController pour un envoi simple via le client de messagerie de l'appareil, et le travail via le protocole SMTP avec des bibliothèques tierces, comme SwiftSMTP. Dans cet article, nous allons détailler les deux méthodes, leurs avantages, leurs limites et fournir des exemples de code pratiques.
1. Envoi d'email via MFMailComposeViewController
MFMailComposeViewController est un composant du framework MessageUI.framework qui fournit une interface prête à l'emploi pour créer et envoyer un email. Cette méthode est idéale lorsqu'il faut implémenter rapidement un envoi sans configuration de serveur SMTP.
Avantages et limites
- Avantages : ne nécessite pas de configuration SMTP, prend en charge le contenu HTML, les pièces jointes, et utilise automatiquement le compte de messagerie configuré sur l'appareil.
- Limites : fonctionne uniquement sur des appareils réels (pas dans le simulateur), nécessite un compte de messagerie configuré, ne convient pas pour un envoi en arrière-plan sans interface utilisateur.
Exemple d'implémentation
Pour commencer, importez le framework et implémentez le délégué :
import UIKitimport MessageUI
class ViewController: UIViewController, MFMailComposeViewControllerDelegate {
@IBAction func sendEmailTapped(_ sender: UIButton) { guard MFMailComposeViewController.canSendMail() else { print("La messagerie n'est pas configurée sur l'appareil") return }
let mailComposer = MFMailComposeViewController() mailComposer.mailComposeDelegate = self mailComposer.setToRecipients(["recipient@example.com"]) mailComposer.setSubject("Bonjour depuis Swift !") mailComposer.setMessageBody("<h1>Email de test</h1><p>Ceci est un contenu HTML.</p>", isHTML: true)
// Ajout d'une pièce jointe if let fileData = "Fichier texte".data(using: .utf8) { mailComposer.addAttachmentData(fileData, mimeType: "text/plain", fileName: "example.txt") }
present(mailComposer, animated: true, completion: nil) }
// Délégué pour gérer le résultat func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) { switch result { case .cancelled: print("Envoi annulé") case .saved: print("Email enregistré comme brouillon") case .sent: print("Email envoyé") case .failed: print("Erreur d'envoi : \\(error?.localizedDescription ?? "inconnue")") @unknown default: break } controller.dismiss(animated: true, completion: nil) }}2. Envoi d'email via SMTP avec la bibliothèque SwiftSMTP
Si vous devez envoyer des emails par programmation, sans intervention de l'utilisateur (par exemple, pour des emails de confirmation d'inscription ou des notifications), utilisez le protocole SMTP. L'une des bibliothèques populaires pour Swift est SwiftSMTP. Elle prend en charge TLS/SSL, l'authentification et la gestion des pièces jointes.
Installation via Swift Package Manager
Ajoutez la dépendance dans Package.swift :
dependencies: [ .package(url: "https://github.com/Kitura/Swift-SMTP.git", from: "2.0.0")]Exemple d'envoi via le serveur SMTP de Gmail
import SwiftSMTP
func sendEmailViaSMTP() { let smtp = SMTP( hostname: "smtp.gmail.com", // Serveur SMTP email: "your-email@gmail.com", password: "your-app-passwo