需要用 C++ 检查 Exchange 服务器的收件箱

Need to check the inbox of an Exchange server with C++

我正在用 C++ 开发一个项目来备份和恢复 Microsoft Exchange 服务器上的电子邮件,我正在尝试为恢复功能编写自动化测试。现在我可以创建测试用户、数据库和邮箱,并且可以通过 Exchange Admin Powershell 在用户之间发送电子邮件。但是,Exchange 没有用于查看或删除电子邮件的命令行开关(据我所知)。有没有办法用直接的 Exchange commandlet 做到这一点?

我还没有找到方法,所以我正在寻找一个 IMAP API,我可以将它添加到项目中以启用查看和删除电子邮件。免费是最理想的,但不能使用 GPL 许可。有没有 GPL 的 C++ IMAP API?是否有以编程方式查看和删除我尚未尝试过的电子邮件的途径?

编辑:老实说,我对如何完成并不太挑剔,我只需要一种方法即可。我愿意接受任何建议。

我没有足够的声誉来发表评论,但是你可以使用 C++ 使用 Exchange Web Services 吗?我用 C# 编写了一些使用 EWS 监控邮箱的程序。我能够查看和删除来自 Exchange 的消息。

[编辑] 这是我在 C# 中使用的示例,如果您决定使用它而不是 C++。或者它可能会帮助您朝着好的方向前进。

using Microsoft.Exchange.WebServices.Data;

ExchangeService svc = new ExchangeService(ExchangeVersion.Exchange2010);
svc.Credentials = new WebCredentials("user@domain.com", "password");
svc.AutodiscoverUrl("user@domain.com");

// loop through messages in Inbox
foreach (EmailMessage msg in svc.FindItems(WellKnownFolderName.Inbox, new ItemView(int.MaxValue)))
{
    // do stuff with message
}

https://technet.microsoft.com/en-us/library/ff459253(v=exchg.150).aspx

Search-Mailbox 可以删除邮件。

https://technet.microsoft.com/en-us/library/ee633455(v=exchg.150).aspx

ExportMailboxRequest 和 ImportMailboxRequest cmdlet 完成导入和导出数据的大部分繁重工作。

为什么需要阅读消息? Powershell 还可以使用 Outlook 库命令执行客户端脚本。

编辑

在您的测试电子邮件中添加 'magic phrase'。 "MagicRainbowUnicorn".

  1. 删除一条消息

    Search-Mailbox -Identity "TestMailbox" -SearchQuery 'MagicRainbowUnicorn' -DeleteContent
    
  2. 测试消息

    Switch ((Search-Mailbox -Identity "TestMailbox" -SearchQuery 'MagicRainbowUnicorn').count) {
        0 { "No Results Found" }
        1 { "One Result" }
        default { "More than One, or some other strange Result" }
        }