E-Mail-Versand in Rust: Die Bibliotheken lettre und mailparse für E-Mails

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 Rust: Leistungsstarke Werkzeuge für die Arbeit mit E-Mails



Rust ist eine Systemprogrammiersprache, die zunehmend für die Erstellung zuverlässiger und leistungsstarker Webdienste verwendet wird. Eine der typischen Aufgaben ist der Versand von E-Mails. In diesem Artikel werden wir zwei wichtige Bibliotheken des Rust-Ökosystems für die Arbeit mit E-Mails im Detail besprechen: lettre (Versand) und mailparse (Parsing). Sie erfahren, wie Sie einen SMTP-Client einrichten, eine E-Mail mit Anhängen versenden und eingehende E-Mails verarbeiten.



Die Bibliothek lettre: E-Mails über SMTP versenden



lettre ist eine moderne, asynchrone und synchrone Bibliothek zum Versenden von E-Mails über SMTP, SMTP-SSL und STARTTLS. Sie unterstützt:



  • Versand von Text- und HTML-E-Mails
  • Anhänge (Bilder, Dokumente, Archive)
  • Authentifizierung (LOGIN, PLAIN, XOAUTH2)
  • DKIM-Signatur und TLS-Verschlüsselung
  • Arbeit mit async/await (tokio, async-std)


Fügen Sie zunächst die Abhängigkeit in Ihre Cargo.toml ein:



[dependencies]lettre = { version = "0.11", features = ["builder", "smtp-transport", "tokio1-rustls-tls"] }tokio = { version = "1", features = ["full"] }


Basisbeispiel: Versand einer Text-E-Mail



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

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

// SMTP-Konfiguration (Gmail, Yandex, Mail.ru usw.) let creds = Credentials::new("sender@example.com".to_string(), "your_password".to_string()); let mailer = SmtpTransport::relay("smtp.gmail.com")? .credentials(creds) .build();

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


Versand einer HTML-E-Mail mit Anhängen



Um eine E-Mail mit HTML-Markup und einer Datei zu senden, verwenden Sie MultiPart:



use lettre::message::{header, MultiPart, SinglePart};use lettre::{Message, SmtpTransport, Transport};use std::fs;

let file_content = fs::read("document.pdf")?;let attachment = SinglePart::builder() .header(header::ContentType::parse("application/pdf")?) .header(header::ContentDisposition::attachment("document.pdf")) .body(file_content);

let html_part = SinglePart::builder() .header(header::ContentType::TEXT_HTML) .body(String::from("<h1>Hallo!</h1><p>Dies ist eine HTML-E-Mail mit Anhang.</p>"));

let email = Message::builder() .from("sender@example.com".parse()?) .to("recipient@example.com".parse()?) .subject("HTML + Anhang") .multipart( MultiPart::mixed() .multipart(MultiPart::alternative().singlepart(html_part)) .singlepart(attachment), )?;


Die Bibliothek mailparse: Analyse eingehender E-Mails



mailparse ist eine leichte Bibliothek zum Parsen von E-Mail-Nachrichten im MIME-Format. Sie ist nützlich, wenn Sie E-Mails über IMAP/POP3 verarbeiten oder .eml-Dateien lesen. Hauptfunktionen:



  • Extrahieren von Kopfzeilen (From, To, Subject, Date)
  • Abrufen des E-Mail-Textkörpers (Text/HTML)
  • Extrahieren von Anhängen mit MIME-Typen
  • Dekodierung von Base64 und Quoted-Printable


Beispiel: Lesen einer .eml-Datei



use mailparse::*;

fn main() { let eml_content = std::fs::read("email.eml")

Empfehlungen