|
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
|
} |