Rust и Imap

Совершенный новичек.
В наличии только:

  1. Блэнди Дж., Орендорф Дж. - Программирование на языке Rust
  2. Abhishek Chanda - Network Programming with Rust

Пытаюсь написать парсер электронной почты.
Нагуглил некий код начинающийся на:

extern crate imap;
extern crate native_tls;
use imap::client::Client;
use native_tls::TlsConnector;

карго выдает ошибку:

   Compiling mail v0.1.0 (/home/digymonster/codding/rust/mail)
error[E0603]: module `client` is private
  --> src/main.rs:4:11
   |
4  | use imap::client::Client;
   |           ^^^^^^ private module
   |
note: the module `client` is defined here
  --> /home/digymonster/.cargo/registry/src/github.com-1ecc6299db9ec823/imap-2.4.1/src/lib.rs:86:1
   |
86 | mod client;
   | ^^^^^^^^^^

For more information about this error, try `rustc --explain E0603`.
error: could not compile `mail` due to previous error

Файл Cargo.toml:

[package]
name = "mail"
version = "0.1.0"
edition = "2021"

[dependencies]
native-tls = "0.2"
imap = "2.4"

Как побороть?
Спасибо!

Никак не бороть, в используемой версии imap структура Client доступна по импорту use imap::Client. С документацией можно ознакомиться по адресу imap - Rust, там есть и базовые примеры использования.

Кроме того, использовать extern crate в текущих версиях раста нет необходимости - это сильно устаревший сиетаксис, работать будет и без него.

1 лайк

ну, собственно, код:

extern crate imap;
extern crate native_tls;
use imap::client::Client;
use native_tls::TlsConnector;
fn main() {
    let imap_server = "imap.mail.ru";
    let imap_port = 993;
    let username = "*****@mail.ru";
    let password = "**********";
    let tls_connector = TlsConnector::new().unwrap();
    let client = Client::new(imap_server, imap_port);
    let mut session = client.login(username, password).unwrap();
    let mailbox = "INBOX";
    session.select(mailbox).unwrap();
    let mailbox_info = session.fetch("1:1", "FLAGS").unwrap();
    let unseen = mailbox_info.first().unwrap().flags.is_empty();
    if unseen {
        println!("${{alignr -8}}{{color grey}}пусто");
    } else {
        println!("${{alignr -10}}{{color green}}что-то есть");
    }
    session.logout().unwrap();
}

ошибка:

error[E0603]: module client is private
→ src/main.rs:3:11
|
3 | use imap::client::Client;
| ^^^^^^ private module
|
note: the module client is defined here
→ /home/digymonster/.cargo/registry/src/github.com-1ecc6299db9ec823/imap-2.4.1/src/lib.rs:86:1
|
86 | mod client;
| ^^^^^^^^^^

вот из этого:
rustc --explain E0603
ничего не понял