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 ModusBasis-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) Auch in der Bibliothek
Arbeiten mit Daten in Java: Überblick über die Bibliotheken java.time, Joda-Time und Apache Commons
Aufgabenwarteschlangen für Kotlin: Coroutines und KJobQueue
Überwachung von PHP-Anwendungen mit PHPMetrics
Arbeit mit Kafka in PHP: Bibliotheken, Installation und Codebeispiele