gmail_client/
gmail_client.rs

1use avila_cell::{EmailAddress, message::Email};
2use avila_molecule::NetworkAddress;
3
4fn main() {
5    println!("=== Avila Cell - Gmail SMTP Client Demo ===\n");
6
7    // Configuração do Gmail
8    let _smtp_server = NetworkAddress::new("smtp.gmail.com", 587); // TLS/STARTTLS
9    // let smtp_server = NetworkAddress::new("smtp.gmail.com", 465); // SSL
10
11    println!("📧 Conectando ao Gmail SMTP...");
12    println!("   Servidor: smtp.gmail.com:587");
13    println!("   Protocolo: SMTP com STARTTLS\n");
14
15    // NOTA: Para usar Gmail você precisa:
16    // 1. Ativar "App Passwords" na sua conta Google
17    // 2. Ou usar OAuth2 (não implementado ainda)
18
19    let username = "seu-email@gmail.com";
20    let _app_password = "sua-senha-de-app"; // 16 caracteres sem espaços
21
22    // Criar email
23    match EmailAddress::new(username) {
24        Ok(from) => {
25            match EmailAddress::new("destinatario@example.com") {
26                Ok(to_addr) => {
27                    let to = vec![to_addr];
28
29    let mut email = Email::new(
30        from.clone(),
31        to,
32        "Teste do Avila Cell via Gmail".to_string(),
33        r#"Olá!
34
35Este é um email enviado usando o Avila Cell,
36uma biblioteca Rust nativa para protocolos de email.
37
38Características:
39- 100% Rust nativo
40- Sem dependências externas pesadas
41- Suporte a SMTP, POP3 e IMAP
42- Compatível com Gmail, Outlook, etc.
43
44Enviado por: Avila Cell v0.1.0
45"#.to_string(),
46    );
47
48    // Headers adicionais
49    email.add_header("X-Mailer".to_string(), "Avila Cell 0.1.0".to_string());
50    email.add_header("X-Priority".to_string(), "3".to_string()); // Normal priority
51
52    println!("✉️  Email preparado:");
53    println!("   De: {}", email.from);
54    println!("   Para: {:?}", email.to);
55    println!("   Assunto: {}", email.subject);
56    println!("   Message-ID: {}\n", email.id);
57
58    // DIFERENÇAS DO BASIC USAGE:
59    println!("🔍 Diferenças do exemplo básico:");
60    println!("   ❌ Básico: Apenas cria estruturas de dados");
61    println!("   ✅ Gmail: Conexão real com servidor SMTP");
62    println!("   ❌ Básico: Não envia nada");
63    println!("   ✅ Gmail: Envia email de verdade");
64    println!("   ❌ Básico: Sem autenticação");
65    println!("   ✅ Gmail: Autenticação com credenciais");
66    println!("   ❌ Básico: Sem criptografia");
67    println!("   ✅ Gmail: TLS/SSL obrigatório\n");
68
69    // Conectar (comentado pois precisa de credenciais reais)
70    println!("⚠️  AVISO: Conexão desabilitada neste demo");
71    println!("   Para enviar emails reais:");
72    println!("   1. Configure suas credenciais do Gmail");
73    println!("   2. Ative 'App Passwords' no Google");
74    println!("   3. Descomente o código de envio abaixo\n");
75
76    /*
77    // Descomentar para enviar de verdade:
78    match SmtpClient::connect(smtp_server).await {
79        Ok(mut client) => {
80            println!("✅ Conectado ao Gmail!");
81
82            // HELO/EHLO
83            client.helo("avila.inc").await?;
84            println!("✅ HELO enviado");
85
86            // Autenticação (necessário implementar STARTTLS + AUTH)
87            // client.auth_plain(username, app_password).await?;
88
89            // Enviar email
90            client.send_email(&email).await?;
91            println!("✅ Email enviado com sucesso!");
92
93            client.quit().await?;
94        }
95        Err(e) => {
96            eprintln!("❌ Erro ao conectar: {}", e);
97        }
98    }
99    */
100
101    println!("📊 Comparação detalhada:");
102    println!("\n┌─────────────────────┬──────────────┬─────────────┐");
103    println!("│ Recurso             │ Basic Usage  │ Gmail Client│");
104    println!("├─────────────────────┼──────────────┼─────────────┤");
105    println!("│ Criar estruturas    │      ✅      │      ✅     │");
106    println!("│ Validar emails      │      ✅      │      ✅     │");
107    println!("│ RFC 5322 format     │      ✅      │      ✅     │");
108    println!("│ Conexão TCP         │      ❌      │      ✅     │");
109    println!("│ TLS/SSL             │      ❌      │      ✅     │");
110    println!("│ Autenticação SMTP   │      ❌      │      ✅     │");
111    println!("│ Envio real          │      ❌      │      ✅     │");
112    println!("│ STARTTLS            │      ❌      │      ✅     │");
113    println!("└─────────────────────┴──────────────┴─────────────┘");
114
115    println!("\n✅ Demo concluído!");
116    println!("\n💡 Próximos passos:");
117    println!("   - Implementar STARTTLS");
118    println!("   - Implementar AUTH PLAIN/LOGIN");
119    println!("   - Implementar OAuth2 para Gmail");
120    println!("   - Adicionar suporte a anexos");
121    println!("   - Implementar HTML multipart");
122                }
123                Err(e) => eprintln!("Erro ao criar endereço de destino: {}", e),
124            }
125        }
126        Err(e) => eprintln!("Erro ao criar endereço de origem: {}", e),
127    }
128}