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") Também na biblioteca
Criptografia em C++: guia completo para criptografia e hash
golangci-lint para Go: guia completo com exemplos
Geração Swagger/OpenAPI para C++: melhores ferramentas e bibliotecas
Trabalho com ZIP/arquivos em Swift (iOS/macOS): guia completo