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

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: bibliotecas lettre y mailparse



Rust es un lenguaje de programación de sistemas que se utiliza cada vez más para crear servicios web y microservicios de alta carga. Una de las tareas típicas en estos proyectos es el envío de correos electrónicos. En el ecosistema de Rust existen varias bibliotecas maduras para trabajar con correo electrónico, entre las que destacan lettre y mailparse.



En este artículo, analizaremos en detalle cómo configurar el envío de correos en Rust usando SMTP, cómo agregar archivos adjuntos y crear correos HTML, así como cómo analizar mensajes entrantes. El material está dirigido a desarrolladores que ya conocen los fundamentos de Rust.



Biblioteca lettre: base para el envío de correos



Lettre es una biblioteca moderna, asíncrona y síncrona para trabajar con correo electrónico en Rust. Soporta:



  • Transporte SMTP (incluyendo STARTTLS y SSL/TLS);
  • Creación de correos en formato MIME (texto, HTML, archivos adjuntos);
  • Trabajo con codificaciones (Base64, Quoted-Printable);
  • Transportes asíncronos a través de tokio o async-std.


Para agregar lettre a tu proyecto, ejecuta el comando:



cargo add lettrecargo add tokio --features full  # para modo asíncrono


Envío básico de correo electrónico a través de SMTP



Veamos un ejemplo simple: enviar un correo de texto a través del servidor SMTP de Gmail (o de cualquier otro proveedor).



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

fn main() -> Result<(), Box<dyn std::error::Error>> { // Creamos el correo let email = Message::builder() .from("Remitente <from@example.com>".parse()?) .to("Destinatario <to@example.com>".parse()?) .subject("¡Saludos desde Rust!") .body("Este es un correo de prueba enviado desde Rust.".to_string())?;

// Configuración SMTP (ejemplo para Gmail) let creds = Credentials::new( "your_email@gmail.com".to_string(), "your_app_password".to_string(), );

// Creamos el transporte let mailer = SmtpTransport::relay("smtp.gmail.com")? .credentials(creds) .build();

// Enviamos match mailer.send(&email) { Ok(_) => println!("¡Correo enviado exitosamente!"), Err(e) => eprintln!("Error al enviar: {}", e), }

Ok(())}


Ten en cuenta: para Gmail necesitarás una contraseña de aplicación, no la contraseña principal. Para otros proveedores (Yandex, Mail.ru, SMTP propio), cambia la dirección del servidor y el puerto.



Envío de correos HTML con archivos adjuntos



Lettre permite crear fácilmente mensajes MIME de varias partes. Agreguemos un cuerpo HTML y un archivo adjunto:



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>> { // Cuerpo HTML del correo let html_body = "<h1>¡Hola!</h1><p>Este es un correo HTML desde Rust.</p>".to_string();

// Creamos el correo de varias partes let email = Message::builder() .from("Remitente <from@example.com>".parse()?) .to("Destinatario <to@example.com>".parse()?) .subject("Correo HTML con archivo adjunto") .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")?), ), )?;

// Envío (similar al ejemplo anterior)

Recommendations