E-Mail-Versand mit Rust: Die Bibliotheken lettre und mailparse für die E-Mail-Verarbeitung

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 mit Rust: Die Bibliotheken lettre und mailparse



Rust ist eine Systemprogrammiersprache, die zunehmend für die Erstellung hochlastiger Webdienste und Microservices verwendet wird. Eine typische Aufgabe in solchen Projekten ist der Versand von E-Mails. Im Rust-Ökosystem gibt es mehrere ausgereifte Bibliotheken für die E-Mail-Arbeit, unter denen lettre und mailparse hervorstechen.



In diesem Artikel werden wir im Detail besprechen, wie man den E-Mail-Versand mit Rust über SMTP einrichtet, wie man Anhänge hinzufügt und HTML-E-Mails erstellt, sowie wie man eingehende Nachrichten parst. Das Material richtet sich an Entwickler, die bereits mit den Grundlagen von Rust vertraut sind.



Die Bibliothek lettre: Grundlage für den E-Mail-Versand



Lettre ist eine moderne, asynchrone und synchrone Bibliothek für die E-Mail-Arbeit in Rust. Sie unterstützt:



  • SMTP-Transport (einschließlich STARTTLS und SSL/TLS);
  • Erstellung von E-Mails im MIME-Format (Text, HTML, Anhänge);
  • Arbeit mit Kodierungen (Base64, Quoted-Printable);
  • Asynchrone Transporte über tokio oder async-std.


Um lettre zum Projekt hinzuzufügen, führen Sie den folgenden Befehl aus:



cargo add lettrecargo add tokio --features full  # für den asynchronen Modus


Basis-E-Mail-Versand über SMTP



Betrachten wir ein einfaches Beispiel – den Versand einer Text-E-Mail über einen Gmail-SMTP-Server (oder einen anderen Anbieter).



use lettre::transport::smtp::authentication::Credentials;use lettre::{Message, SmtpTransport, Transport};

fn main() -> Result<(), Box<dyn std::error::Error>> { // E-Mail erstellen let email = Message::builder() .from("Absender <from@example.com>".parse()?) .to("Empfänger <to@example.com>".parse()?) .subject("Hallo von Rust!") .body("Dies ist eine Test-E-Mail, gesendet mit Rust.".to_string())?;

// SMTP-Einstellungen (Beispiel für Gmail) let creds = Credentials::new( "your_email@gmail.com".to_string(), "your_app_password".to_string(), );

// Transport erstellen let mailer = SmtpTransport::relay("smtp.gmail.com")? .credentials(creds) .build();

// Senden match mailer.send(&email) { Ok(_) => println!("E-Mail erfolgreich gesendet!"), Err(e) => eprintln!("Fehler beim Senden: {}", e), }

Ok(())}


Hinweis: Für Gmail benötigen Sie ein App-Passwort, nicht Ihr Hauptpasswort. Für andere Anbieter (Yandex, Mail.ru, eigener SMTP) ändern Sie die Serveradresse und den Port.



Versand von HTML-E-Mails mit Anhängen



Lettre ermöglicht die einfache Erstellung mehrteiliger MIME-Nachrichten. Fügen wir einen HTML-Textkörper und einen Anhang hinzu:



use lettre::message::header::ContentType;use lettre::message::{Attachment, MultiPart, SinglePart};use lettre::{Message, SmtpTransport, Transport};

fn send_html_with_attachment() -> Result<(), Box<dyn std::error::Error>> { // HTML-Textkörper der E-Mail let html_body = "<h1>Hallo!</h1><p>Dies ist eine HTML-E-Mail von Rust.</p>".to_string();

// Mehrteilige E-Mail erstellen let email = Message::builder() .from("Absender <from@example.com>".parse()?) .to("Empfänger <to@example.com>".parse()?) .subject("HTML-E-Mail mit Anhang") .multipart( MultiPart::mixed() .singlepart( SinglePart::builder() .header(ContentType::TEXT_HTML) .body(html_body), ) .singlepart( Attachment::new("document.pdf".to_string()) .body(vec![0x25, 0x50, 0x44, 0x46], ContentType::parse("application/pdf")?), ), )?;

// Versand (analog zum vorherigen Beispiel)

Empfehlungen