Envio de email em Rust: bibliotecas lettre e mailparse para mensagens

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Envio de email em Rust: ferramentas poderosas para trabalhar com correio



Rust — uma linguagem de programação de sistemas, cada vez mais usada para criar serviços web confiáveis e de alto desempenho. Uma das tarefas típicas é o envio de emails. Neste artigo, vamos detalhar duas bibliotecas-chave do ecossistema Rust para trabalhar com email: lettre (envio) e mailparse (análise). Você aprenderá como configurar um cliente SMTP, enviar um email com anexos e processar o correio recebido.



Biblioteca lettre: envio de mensagens via SMTP



lettre — é uma biblioteca moderna, assíncrona e síncrona para envio de email via SMTP, SMTP-SSL e STARTTLS. Ela suporta:



  • Envio de mensagens de texto e HTML
  • Anexos (imagens, documentos, arquivos)
  • Autenticação (LOGIN, PLAIN, XOAUTH2)
  • Assinatura DKIM e criptografia TLS
  • Trabalho com async/await (tokio, async-std)


Para começar, adicione a dependência no Cargo.toml:



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


Exemplo básico: envio de mensagem de texto



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

#[tokio::main]async fn main() -> Result<(), Box<dyn std::error::Error>> { // Formata a mensagem let email = Message::builder() .from("Remetente <sender@example.com>".parse()?) .to("Destinatário <recipient@example.com>".parse()?) .subject("Olá do Rust!") .body("Esta é uma mensagem de teste enviada com a biblioteca lettre.".to_string())?;

// Configuração 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();

// Envio match mailer.send(&email) { Ok(_) => println!("Mensagem enviada com sucesso!"), Err(e) => eprintln!("Erro ao enviar: {}", e), } Ok(())}


Envio de mensagem HTML com anexos



Para enviar uma mensagem com marcação HTML e um arquivo, 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>Olá!</h1><p>Esta é uma mensagem HTML com anexo.</p>"));

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


Biblioteca mailparse: análise de mensagens recebidas



mailparse — uma biblioteca leve para análise de mensagens de email no formato MIME. É útil se você processa correio via IMAP/POP3 ou lê arquivos .eml. Principais funcionalidades:



  • Extração de cabeçalhos (From, To, Subject, Date)
  • Obtenção do corpo da mensagem (texto/HTML)
  • Extração de anexos com tipos MIME
  • Decodificação Base64 e Quoted-Printable


Exemplo: leitura de arquivo .eml



use mailparse::*;

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

Recommendations