获取所有 Outlook 电子邮件(包括服务器上的电子邮件)

Get all Outlook emails (including ones on server)

Edit3:我想我也会包括 Microsoft Graph API。只要缓存了足够的数据,就可以使用互操作。不然我就用网上的方法

Edit2:我什至可以更改 Outlook 的离线设置,但我不想对所有文件夹都这样做。

编辑:Programmatically accessing archived mails in an Exchange folder

列出的第三个建议似乎正是我要找的。我可能以缓存模式打开了一个实例。我还不确定如何通过互操作来做到这一点。

这个 post 帮助了我:

我的问题是它只检索了部分消息。我相信这与 Outlook 同步的邮件数量有关。如果我在 Outlook 中浏览该文件夹,列表底部会显示 "Click here to view more on Microsoft Exchange"。单击后,自然会显示其余消息。

这可以通过互操作实现吗?

Add-Type -LiteralPath "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Visual Studio Tools for Office\PIA\Office15\Microsoft.Office.Interop.Outlook.dll"
$oApp = [Microsoft.Office.Interop.Outlook.ApplicationClass]::new()
$oNamespace = $oApp.GetNamespace("MAPI")
$TargetFolder = $oNamespace.GetDefaultFolder([Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderInbox)
$MailItemsWithAttachments = $TargetFolder.Items | Where-Object {$null -ne $_.Attachments} | Select-Object Subject, Attachments

最后一行是我认为需要调整的地方。请随意在 VB/C# 中提供示例,我对两者都很熟悉。

发生的事情是它只提取为您缓存的内容,除非您将缓存期限设置为 "All" 或禁用缓存,否则您将无法再提取任何内容。您可以通过转到帐户设置来禁用,单击 "change" 然后取消选中使用缓存交换模式。