Skip to main content

demo/
demo.rs

1//! Comprehensive example showcasing all GuerrillaMail client functionality.
2//!
3//! Features demonstrated:
4//! - Creating a client (with optional proxy support)
5//! - Viewing available email domains
6//! - Creating a temporary email address
7//! - Polling for incoming messages
8//! - Fetching full email content
9//! - Deleting/cleaning up the email address
10
11use guerrillamail_client::Client;
12
13#[tokio::main]
14async fn main() -> Result<(), Box<dyn std::error::Error>> {
15    println!("šŸ“§ GuerrillaMail Rust Client - Full Demo");
16    println!("{}", "=".repeat(50));
17
18    // =========================================
19    // 1. Create client (optionally with proxy)
20    // =========================================
21    println!("\nšŸ”Œ Creating client...");
22
23    // Without proxy:
24    let client = Client::new().await?;
25
26    // With proxy (uncomment to use):
27    // let client = Client::builder().proxy("http://127.0.0.1:8080").build().await?;
28
29    // Custom configuration example (uncomment to use):
30    // let client = Client::builder()
31    //     .proxy("http://127.0.0.1:8080")
32    //     .danger_accept_invalid_certs(false)
33    //     .user_agent("guerrillamail-demo/1.0")
34    //     .ajax_url("https://www.guerrillamail.com/ajax.php")
35    //     .build()
36    //     .await?;
37
38    println!("   āœ… Connected to GuerrillaMail API");
39
40    // =========================================
41    // 2. View available domains
42    // =========================================
43    println!("\n🌐 Available email domains:");
44    for domain in client.domains() {
45        println!("   - {}", domain);
46    }
47
48    // =========================================
49    // 3. Create temporary email address
50    // =========================================
51    println!("\nšŸ“¬ Creating temporary email...");
52    let alias = format!("demo{}", rand::random::<u16>());
53    let email = client.create_email(&alias).await?;
54    println!("   āœ… Created: {}", email);
55
56    // =========================================
57    // 4. Poll for messages (get_messages)
58    // =========================================
59    println!("\nā³ Waiting for messages...");
60    println!("   Send an email to: {}", email);
61    println!("   (Polling for up to 2 minutes)");
62
63    let start = std::time::Instant::now();
64    let timeout = std::time::Duration::from_secs(120);
65    let poll_interval = std::time::Duration::from_secs(5);
66
67    loop {
68        // get_messages returns basic info: id, from, subject, excerpt
69        let messages = client.get_messages(&email).await?;
70
71        if !messages.is_empty() {
72            println!("\n\nšŸ“„ Received {} message(s)!", messages.len());
73
74            for msg in &messages {
75                println!("\n{}", "-".repeat(50));
76                println!("Message ID:  {}", msg.mail_id);
77                println!("From:        {}", msg.mail_from);
78                println!("Subject:     {}", msg.mail_subject);
79                println!(
80                    "Excerpt:     {}",
81                    &msg.mail_excerpt[..msg.mail_excerpt.len().min(80)]
82                );
83                println!("Timestamp:   {}", msg.mail_timestamp);
84
85                // =========================================
86                // 5. Fetch full email content (fetch_email)
87                // =========================================
88                println!("\nšŸ“„ Fetching full email body...");
89                match client.fetch_email(&email, &msg.mail_id).await {
90                    Ok(details) => {
91                        println!("   Body length: {} characters", details.mail_body.len());
92                        println!("   Preview (first 500 chars):");
93                        println!("   {}", "-".repeat(40));
94                        let preview: String = details.mail_body.chars().take(500).collect();
95                        for line in preview.lines().take(10) {
96                            println!("   {}", line);
97                        }
98                        if details.mail_body.len() > 500 {
99                            println!("   ... (truncated)");
100                        }
101                    }
102                    Err(e) => {
103                        eprintln!("   āŒ Failed to fetch: {}", e);
104                    }
105                }
106            }
107            break;
108        }
109
110        if start.elapsed() >= timeout {
111            println!("\n\nāš ļø  Timeout: No messages received");
112            break;
113        }
114
115        let remaining = (timeout - start.elapsed()).as_secs();
116        print!("\r   Checking... {} seconds remaining   ", remaining);
117        use std::io::Write;
118        std::io::stdout().flush().ok();
119
120        tokio::time::sleep(poll_interval).await;
121    }
122
123    // =========================================
124    // 6. Delete/forget email address
125    // =========================================
126    println!("\nšŸ—‘ļø  Cleaning up email address...");
127    match client.delete_email(&email).await {
128        Ok(true) => println!("   āœ… Email address deleted"),
129        Ok(false) => println!("   āš ļø  Deletion may have failed"),
130        Err(e) => eprintln!("   āŒ Error: {}", e),
131    }
132
133    println!("\n{}", "=".repeat(50));
134    println!("✨ Demo complete!");
135
136    Ok(())
137}