Envío de correo electrónico en Rust: bibliotecas lettre y mailparse para mensajes

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Envío de correo electrónico en Rust: potentes herramientas para trabajar con el correo



Rust es un lenguaje de programación de sistemas que se utiliza cada vez más para crear servicios web robustos y de alto rendimiento. Una de las tareas típicas es el envío de correos electrónicos. En este artículo, analizaremos en detalle dos bibliotecas clave del ecosistema Rust para trabajar con correo electrónico: lettre (envío) y mailparse (análisis). Aprenderá a configurar un cliente SMTP, enviar un correo con archivos adjuntos y procesar el correo entrante.



Biblioteca lettre: envío de correos a través de SMTP



lettre es una biblioteca moderna, asíncrona y síncrona para enviar correos electrónicos a través de SMTP, SMTP-SSL y STARTTLS. Soporta:



  • Envío de correos en texto plano y HTML
  • Archivos adjuntos (imágenes, documentos, archivos comprimidos)
  • Autenticación (LOGIN, PLAIN, XOAUTH2)
  • Firma DKIM y cifrado TLS
  • Trabajo con async/await (tokio, async-std)


Para empezar, agregue la dependencia en Cargo.toml:



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


Ejemplo básico: envío de un correo en texto plano



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

#[tokio::main]async fn main() -> Result<(), Box<dyn std::error::Error>> { // Formamos el correo let email = Message::builder() .from("Remitente <sender@example.com>".parse()?) .to("Destinatario <recipient@example.com>".parse()?) .subject("¡Saludos desde Rust!") .body("Este es un correo de prueba enviado con la biblioteca lettre.".to_string())?;

// Configuración 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();

// Envío match mailer.send(&email) { Ok(_) => println!("¡Correo enviado con éxito!"), Err(e) => eprintln!("Error al enviar: {}", e), } Ok(())}


Envío de un correo HTML con archivos adjuntos



Para enviar un correo con marcado HTML y un archivo, use 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>¡Hola!</h1><p>Este es un correo HTML con archivo adjunto.</p>"));

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


Biblioteca mailparse: análisis de correos entrantes



mailparse es una biblioteca ligera para analizar mensajes de correo electrónico en formato MIME. Es útil si procesa correo a través de IMAP/POP3 o lee archivos .eml. Las principales capacidades son:



  • Extracción de encabezados (From, To, Subject, Date)
  • Obtención del cuerpo del mensaje (texto/HTML)
  • Extracción de archivos adjuntos con tipos MIME
  • Decodificación Base64 y Quoted-Printable


Ejemplo: lectura de un archivo .eml



use mailparse::*;

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

Recommendations