#outlook #mapi #winapi #api-bindings

outlook-mapi

Rust对Outlook MAPI接口的绑定

31个版本 (13个破坏性)

0.14.5 2024年8月1日
0.14.4 2024年7月23日
0.14.1 2024年6月12日
0.13.0 2024年3月21日

#46 in Windows API

Download history 96/week @ 2024-05-04 93/week @ 2024-05-11 145/week @ 2024-05-18 2/week @ 2024-05-25 129/week @ 2024-06-08 57/week @ 2024-06-15 81/week @ 2024-06-22 1/week @ 2024-06-29 31/week @ 2024-07-06 107/week @ 2024-07-13 262/week @ 2024-07-20 195/week @ 2024-07-27 17/week @ 2024-08-03 3/week @ 2024-08-10

483 每月下载量

MIT 许可证

2.5MB
48K SLoC

outlook-mapi

此包实现了对Outlook MAPI COM API的Rust绑定。绑定由Windows包在outlook-mapi-sys中生成。

入门

在您的Cargo.toml中包含对最新版outlook-mapi的引用。

有关更多详细信息,请参阅文档

安全性

大多数绑定都透明地从outlook-mapi-sys导出为outlook-mapi::sys模块,并且它们仍然被标记为unsafe。与典型围绕-sys包的Rust包不同,此包的重点是编写尽可能少的手动包装代码。这样,outlook-mapi可以投影100%的Outlook MAPI COM API,但缺点是您需要将大多数使用封装在unsafe块或函数中。

便利类型

此包还添加了几个Rust结构和宏定义,以使处理MAPI类型更容易,并在使用原始MAPI API时提供一些生命周期保证。例如,C++中MAPI调用的典型序列如下所示

MAPIInitialize(...);

// Logon with a new session.
MAPILogonEx(..., &session);

// Do stuff with the session...

// This should be the last reference to the session!
session->Release();

MAPIUninitialize();

便利类型确保您有一对匹配的MAPIInitializeMAPIUninitialize调用,并且它们至少与session的使用一样长。它们还限制您可以传递给这些调用中的每个调用的标志

println!("Initializing MAPI...");
let initialized = Initialize::new(Default::default()).expect("failed to initialize MAPI");
println!("Trying to logon to the default profile...");
let logon = Logon::new(
    initialized,
    Default::default(),
    None,
    None,
    LogonFlags {
        extended: true,
        unicode: true,
        logon_ui: true,
        use_default: true,
        ..Default::default()
    },
)
.expect("should be able to logon to the default MAPI profile");
println!("Success!");

依赖项

~128MB
~2M SLoC