Envoi d'email en Rust : bibliothèques lettre et async-smtp pour les mailings

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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                    

Recommendations