Envio de email em Rust: bibliotecas lettre e mailparse para trabalhar com e-mail

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



Rust é uma linguagem de programação de sistemas que está sendo cada vez mais usada para criar serviços web e microsserviços de alta carga. Uma das tarefas típicas em tais projetos é o envio de e-mails. No ecossistema Rust, existem várias bibliotecas maduras para trabalhar com e-mail, entre as quais se destacam lettre e mailparse.



Neste artigo, vamos detalhar como configurar o envio de e-mails em Rust usando SMTP, como adicionar anexos e formatar e-mails HTML, bem como analisar mensagens recebidas. O material é voltado para desenvolvedores que já conhecem os fundamentos do Rust.



Biblioteca lettre: base para envio de e-mails



Lettre é uma biblioteca moderna, assíncrona e síncrona para trabalhar com e-mail em Rust. Ela suporta:



  • Transporte SMTP (incluindo STARTTLS e SSL/TLS);
  • Formatação de e-mails no formato MIME (texto, HTML, anexos);
  • Trabalho com codificações (Base64, Quoted-Printable);
  • Transportes assíncronos via tokio ou async-std.


Para adicionar lettre ao seu projeto, execute o comando:



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


Envio básico de e-mail via SMTP



Vamos considerar o exemplo mais simples — envio de um e-mail de texto através do servidor SMTP do Gmail (ou de qualquer outro provedor).



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

fn main() -> Result<(), Box<dyn std::error::Error>> { // Formata o e-mail let email = Message::builder() .from("Remetente <from@example.com>".parse()?) .to("Destinatário <to@example.com>".parse()?) .subject("Olá do Rust!") .body("Este é um e-mail de teste enviado do Rust.".to_string())?;

// Configurações SMTP (exemplo para Gmail) let creds = Credentials::new( "your_email@gmail.com".to_string(), "your_app_password".to_string(), );

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

// Envia match mailer.send(&email) { Ok(_) => println!("E-mail enviado com sucesso!"), Err(e) => eprintln!("Erro ao enviar: {}", e), }

Ok(())}


Observe: para o Gmail, será necessária uma senha de aplicativo, não a senha principal. Para outros provedores (Yandex, Mail.ru, SMTP próprio), altere o endereço do servidor e a porta.



Envio de e-mails HTML com anexos



Lettre permite formatar facilmente mensagens MIME de várias partes. Vamos adicionar corpo HTML e anexo:



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>> { // Corpo HTML do e-mail let html_body = "<h1>Olá!</h1><p>Este é um e-mail HTML do Rust.</p>".to_string();

// Formata o e-mail de várias partes let email = Message::builder() .from("Remetente <from@example.com>".parse()?) .to("Destinatário <to@example.com>".parse()?) .subject("E-mail HTML com anexo") .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")?), ), )?;

// Envio (semelhante ao exemplo anterior)

Recommendations