使用async-imap的Search命令获取邮件时的数量异常问题
使用async-imap查询邮件时仅返回部分邮件的问题
我尝试用async-imap库执行以下代码从服务器查询邮件:
let messages_set = imap_session.search("ALL").await?;
但该代码仅返回了最后34封邮件(UID为1至34),而我的邮箱实际有200多封邮件。我希望每次查询能获取30封邮件,或者单次最多获取10000000封邮件。
我做了以下测试,结果如下:
| 查询语句 | 返回邮件情况 |
|---|---|
| ALL | 最后34封 |
| LARGER 1000 | 34封 |
| UID 10:* | 34封 |
| SEEN | 34封 |
| SINCE 06-May-2026 | 6封 |
| UID LARGER 10 | 0封 |
| SUBJECT "xxxx" | 0封 |
| FROM "xxx@163.com" | 0封 |
完整测试代码如下:
let imap_addr = (imap_server, 993); let tcp_stream = TcpStream::connect(imap_addr).await?; let tls = async_native_tls::TlsConnector::new(); let tls_stream = tls.connect(imap_server, tcp_stream).await?; let client = async_imap::Client::new(tls_stream); println!("-- connected to {}:{}", imap_addr.0, imap_addr.1); // 未认证的客户端无法进行邮件操作,需要先登录 let mut imap_session = client.login(login, password).await.map_err(|e| e.0)?; println!("-- logged in a {}", login); // 选择INBOX邮箱 imap_session.select("INBOX").await?; println!("-- INBOX selected"); let query = "SINCE 06-May-2026".to_owned(); let messages_set = imap_session.search(query).await?; let messages: Vec<u32> = messages_set.into_iter().collect(); println!("emails count: {}", messages.len()); // 退出登录,保持服务器友好 imap_session.logout().await?;
内容的提问来源于stack exchange,提问作者long
相关产品推荐
相关产品推荐

