Envoi d'email en Rust : bibliothèques lettre et mailparse pour travailler avec le courrier

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 mailparse



Rust est un langage de programmation système de plus en plus utilisé pour créer des services web et des microservices à forte charge. L'une des tâches typiques dans ces projets est l'envoi d'emails. Dans l'écosystème Rust, il existe plusieurs bibliothèques matures pour travailler avec les emails, parmi lesquelles se distinguent lettre et mailparse.



Dans cet article, nous allons détailler comment configurer l'envoi d'emails en Rust en utilisant SMTP, comment ajouter des pièces jointes et formater des emails HTML, ainsi que comment analyser les messages entrants. Ce contenu est destiné aux développeurs déjà familiers avec les bases de Rust.



Bibliothèque lettre : base pour l'envoi d'emails



Lettre est une bibliothèque moderne, asynchrone et synchrone pour travailler avec les emails en Rust. Elle prend en charge :



  • Le transport SMTP (y compris STARTTLS et SSL/TLS) ;
  • La création d'emails au format MIME (texte, HTML, pièces jointes) ;
  • Le travail avec les encodages (Base64, Quoted-Printable) ;
  • Les transports asynchrones via tokio ou async-std.


Pour ajouter lettre à votre projet, exécutez la commande :



cargo add lettrecargo add tokio --features full  # pour le mode asynchrone


Envoi basique d'email via SMTP



Considérons un exemple simple : l'envoi d'un email texte via le serveur SMTP de Gmail (ou de tout autre fournisseur).



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

fn main() -> Result<(), Box<dyn std::error::Error>> { // Création de l'email let email = Message::builder() .from("Expéditeur <from@example.com>".parse()?) .to("Destinataire <to@example.com>".parse()?) .subject("Bonjour depuis Rust !") .body("Ceci est un email de test envoyé depuis Rust.".to_string())?;

// Configuration SMTP (exemple pour Gmail) let creds = Credentials::new( "your_email@gmail.com".to_string(), "your_app_password".to_string(), );

// Création du transport 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(())}


Attention : pour Gmail, vous aurez besoin d'un mot de passe d'application, et non de votre mot de passe principal. Pour d'autres fournisseurs (Yandex, Mail.ru, votre propre SMTP), modifiez l'adresse du serveur et le port.



Envoi d'emails HTML avec pièces jointes



Lettre permet de créer facilement des messages MIME multipartites. Ajoutons un corps HTML et une pièce jointe :



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>> { // Corps HTML de l'email let html_body = "<h1>Bonjour !</h1><p>Ceci est un email HTML depuis Rust.</p>".to_string();

// Création de l'email multipartite let email = Message::builder() .from("Expéditeur <from@example.com>".parse()?) .to("Destinataire <to@example.com>".parse()?) .subject("Email HTML avec pièce jointe") .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")?), ), )?;

// Envoi (similaire à l'exemple précédent)

Recommendations