Envoi d'email en Rust : bibliothèques lettre et async-smtp
L'envoi de courriels est une fonction de base de tout site éducatif ou commercial. Dans l'écosystème Rust, il existe plusieurs solutions matures pour cette tâche. Dans cet article, nous analyserons les deux bibliothèques les plus populaires : lettre (envoi synchrone) et async-smtp (envoi asynchrone). Vous apprendrez à configurer un client SMTP, envoyer un simple courriel, ajouter des pièces jointes et gérer les erreurs.
1. Bibliothèque lettre — envoi synchrone
lettre est une bibliothèque modulaire pour travailler avec les protocoles de messagerie (SMTP, SMTPS, STARTTLS). Elle prend en charge :
- L'envoi via un serveur SMTP externe (Gmail, Yandex, Mail.ru, serveur personnalisé).
- La prise en charge des formats MIME (texte, HTML, pièces jointes).
- Le chiffrement TLS/SSL.
- Le travail avec les encodages (Base64, quoted-printable).
1.1. Installation de lettre
Ajoutez dans Cargo.toml :
[dependencies]lettre = "0.11"lettre_email = "0.11" # obsolète, mais encore utilisé# Pour la version asynchrone — lettre avec la feature "tokio1" ou "async-std1"1.2. Exemple : envoi d'un simple courriel via SMTP
use lettre::transport::smtp::authentication::Credentials;use lettre::transport::smtp::SmtpTransport;use lettre::message::Message;use lettre::MessageBuilder;
fn main() { // Création du courriel let email = Message::builder() .from("sender@example.com".parse().unwrap()) .to("recipient@example.com".parse().unwrap()) .subject("Bonjour depuis Rust!") .body("Ceci est un courriel de test envoyé avec la bibliothèque lettre.".to_string()) .unwrap();
// Paramètres du serveur SMTP (exemple pour Gmail) let creds = Credentials::new("your_email@gmail.com".to_string(), "your_password".to_string());
// Ouverture d'une connexion sécurisée let mailer = SmtpTransport::starttls_relay("smtp.gmail.com") .unwrap() .credentials(creds) .build();
// Envoi match mailer.send(&email) { Ok(_) => println!("Courriel envoyé avec succès !"), Err(e) => eprintln!("Erreur d'envoi : {}", e), }}1.3. Exemple : courriel avec contenu HTML et pièce jointe
use lettre::message::{MultiPart, SinglePart};use lettre::Message;
fn build_html_email() -> Message { // Partie HTML let html_part = SinglePart::builder() .header(lettre::message::header::ContentType::TEXT_HTML) .body(String::from("<h1>Bonjour !</h1><p>Ceci est un courriel HTML.</p>"));
// Pièce jointe (par exemple, fichier PDF) let attachment = SinglePart::builder() .header(lettre::message::header::ContentType::parse("application/pdf").unwrap()) .body(vec![0x25, 0x50, 0x44, 0x46]); // placeholder pour PDF
// Assemblage du courriel multipart Message::builder() .from("from@example.com".parse().unwrap()) .to("to@example.com".parse().unwrap()) .subject("Courriel avec HTML et pièce jointe") .multipart( MultiPart::mixed() .multipart(MultiPart::alternative().singlepart(html_part)) .singlepart(attachment), ) .unwrap()}2. Envoi asynchrone : async-smtp
La bibliothèque async-smtp est conçue pour l'envoi non bloquant de courriels dans les applications asynchrones (par exemple, avec tokio ou async-std). Elle utilise la même API que lettre, mais avec async/await.
2.1. Installation de async-smtp
[dependencies]async-smtp = "0.6"tokio = { version = "1", features = ["full"] }2.2. Exemple : envoi asynchrone
use async_smtp::{SmtpClient, SmtpTransport};use async_smtp::authentication::Credentials;use lettre::message::Mess Aussi dans la bibliothèque
Mise en cache en TypeScript : Redis et autres solutions pour Node.js
Journalisation en JavaScript (Node.js) : les meilleures solutions pour votre projet
Travailler avec XML en C# (.NET) : Guide complet pour débutants
Stripe JavaScript (Node.js) : guide complet avec exemples
Koin — Conteneur d'injection de dépendances pour Kotlin