1 use anyhow::Result;
2 use smbcloud_mail_imap::{listen::listen, storage::MessageStorage};
3
4 #[tokio::main]
5 async fn main() -> Result<()> {
6 // Initialize tracing subscriber for logging
7 tracing_subscriber::fmt::init();
8
9 // Create shared message storage
10 let storage = MessageStorage::new();
11
12 // Clone storage for IMAP server
13 let imap_storage = storage.clone();
14
15 // Start IMAP server in a separate task
16 tokio::spawn(async move {
17 if let Err(err) = smbcloud_mail_imap::imap::listen::listen(imap_storage.mailbox_store).await {
18 tracing::error!("IMAP server error: {:?}", err);
19 }
20 });
21
22 // Start SMTP server (this will block)
23 listen(storage).await
24 }