E-Mail-Versand in Swift (iOS/macOS): MFMailComposeViewController und SMTP

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

E-Mail-Versand in Swift (iOS/macOS): vollständiger Leitfaden



Das Versenden von E-Mails ist eine der Schlüsselfunktionen moderner mobiler und Desktop-Anwendungen. Im Apple-Ökosystem für Swift (iOS/macOS) gibt es zwei Hauptansätze: die Verwendung des integrierten Controllers MFMailComposeViewController für den einfachen Versand über den E-Mail-Client des Geräts und die Arbeit über das SMTP-Protokoll mit Hilfe von Drittanbieter-Bibliotheken wie SwiftSMTP. In diesem Artikel werden wir beide Methoden, ihre Vorteile, Einschränkungen und praktische Codebeispiele im Detail besprechen.



1. E-Mail-Versand über MFMailComposeViewController



MFMailComposeViewController ist eine Komponente aus dem Framework MessageUI.framework, die eine vorgefertigte Oberfläche zum Erstellen und Senden einer E-Mail bereitstellt. Diese Methode ist ideal, wenn Sie den Versand schnell ohne Einrichtung eines SMTP-Servers realisieren müssen.



Vorteile und Einschränkungen

  • Vorteile: erfordert keine SMTP-Einrichtung, unterstützt HTML-Inhalte, Anhänge, verwendet automatisch das auf dem Gerät eingerichtete E-Mail-Konto.
  • Einschränkungen: funktioniert nur auf echten Geräten (nicht im Simulator), erfordert ein eingerichtetes E-Mail-Konto, nicht geeignet für den Hintergrundversand ohne Benutzeroberfläche.


Implementierungsbeispiel

Binden Sie zunächst das Framework ein und implementieren Sie den Delegaten:



import UIKitimport MessageUI

class ViewController: UIViewController, MFMailComposeViewControllerDelegate {

@IBAction func sendEmailTapped(_ sender: UIButton) { guard MFMailComposeViewController.canSendMail() else { print("Auf dem Gerät ist kein E-Mail-Konto eingerichtet") return }

let mailComposer = MFMailComposeViewController() mailComposer.mailComposeDelegate = self mailComposer.setToRecipients(["recipient@example.com"]) mailComposer.setSubject("Hallo von Swift!") mailComposer.setMessageBody("<h1>Test-E-Mail</h1><p>Dies ist HTML-Inhalt.</p>", isHTML: true)

// Anhang hinzufügen if let fileData = "Textdatei".data(using: .utf8) { mailComposer.addAttachmentData(fileData, mimeType: "text/plain", fileName: "example.txt") }

present(mailComposer, animated: true, completion: nil) }

// Delegat zur Verarbeitung des Ergebnisses func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) { switch result { case .cancelled: print("Versand abgebrochen") case .saved: print("E-Mail als Entwurf gespeichert") case .sent: print("E-Mail gesendet") case .failed: print("Fehler beim Senden: \\(error?.localizedDescription ?? "unbekannt")") @unknown default: break } controller.dismiss(animated: true, completion: nil) }}


2. E-Mail-Versand über SMTP mit der Bibliothek SwiftSMTP



Wenn Sie E-Mails programmatisch ohne Benutzereingriff versenden müssen (z. B. für Registrierungs-E-Mails oder Benachrichtigungen), verwenden Sie das SMTP-Protokoll. Eine der beliebten Bibliotheken für Swift ist SwiftSMTP. Sie unterstützt TLS/SSL, Authentifizierung und die Arbeit mit Anhängen.



Installation über Swift Package Manager

Fügen Sie die Abhängigkeit in Package.swift hinzu:

dependencies: [    .package(url: "https://github.com/Kitura/Swift-SMTP.git", from: "2.0.0")]


Beispiel für den Versand über den Gmail-SMTP-Server

import SwiftSMTP

func sendEmailViaSMTP() { let smtp = SMTP( hostname: "smtp.gmail.com", // SMTP-Server email: "your-email@gmail.com", password: "your-app-passwo

Empfehlungen