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") Auch in der Bibliothek
Testen in C# (.NET): Vollständiger Überblick über Frameworks und Tools
Logging für TypeScript: Die Bibliothek Winston
Reaktive Programmierung in Go (Golang): Bibliotheken, Muster und Beispiele
PDF-Berichterstellung in Rust: Die Bibliothek printpdf