Envoi d'email en Rust : bibliothèques lettre et mailparse pour les courriels

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 : des outils puissants pour travailler avec le courrier



Rust est un langage de programmation système de plus en plus utilisé pour créer des services web fiables et performants. L'une des tâches courantes est l'envoi de courriels. Dans cet article, nous allons détailler deux bibliothèques clés de l'écosystème Rust pour travailler avec les emails : lettre (envoi) et mailparse (analyse). Vous apprendrez à configurer un client SMTP, à envoyer un email avec pièces jointes et à traiter le courrier entrant.



Bibliothèque lettre : envoi de courriels via SMTP



lettre est une bibliothèque moderne, asynchrone et synchrone pour l'envoi d'emails via SMTP, SMTP-SSL et STARTTLS. Elle prend en charge :



  • L'envoi d'emails texte et HTML
  • Les pièces jointes (images, documents, archives)
  • L'authentification (LOGIN, PLAIN, XOAUTH2)
  • La signature DKIM et le chiffrement TLS
  • Le travail avec async/await (tokio, async-std)


Pour commencer, ajoutez la dépendance dans Cargo.toml :



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


Exemple de base : envoi d'un email texte



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

#[tokio::main]async fn main() -> Result<(), Box<dyn std::error::Error>> { // Création du message let email = Message::builder() .from("Expéditeur <sender@example.com>".parse()?) .to("Destinataire <recipient@example.com>".parse()?) .subject("Bonjour depuis Rust !") .body("Ceci est un email de test envoyé avec la bibliothèque lettre.".to_string())?;

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

// Envoi match mailer.send(&email) { Ok(_) => println!("Email envoyé avec succès !"), Err(e) => eprintln!("Erreur d'envoi : {}", e), } Ok(())}


Envoi d'un email HTML avec pièces jointes



Pour envoyer un email avec du code HTML et un fichier, utilisez 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>Bonjour !</h1><p>Ceci est un email HTML avec pièce jointe.</p>"));

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


Bibliothèque mailparse : analyse des courriels entrants



mailparse est une bibliothèque légère pour analyser les messages email au format MIME. Elle est utile si vous traitez du courrier via IMAP/POP3 ou lisez des fichiers .eml. Principales fonctionnalités :



  • Extraction des en-têtes (From, To, Subject, Date)
  • Obtention du corps du message (texte/HTML)
  • Extraction des pièces jointes avec types MIME
  • Décodage Base64 et Quoted-Printable


Exemple : lecture d'un fichier .eml



use mailparse::*;

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

Recommendations