1use 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 println!("\nš Creating client...");
22
23 let client = Client::new().await?;
25
26 println!(" ā
Connected to GuerrillaMail API");
39
40 println!("\nš Available email domains:");
44 for domain in client.domains() {
45 println!(" - {}", domain);
46 }
47
48 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 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 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 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 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}