【发布时间】:2020-01-10 00:53:02
【问题描述】:
Edit3:我想我也会包含 Microsoft Graph API。只要缓存了足够的数据,使用互操作是可以接受的。否则,我会使用在线的方法。
Edit2:我什至可以更改 Outlook 的离线设置,但我不想对所有文件夹都这样做。
编辑:Programmatically accessing archived mails in an Exchange folder
列出的第三个建议似乎正是我想要的。我可能已经以缓存模式打开了一个实例。我还不确定如何通过互操作来做到这一点。
这篇文章帮助了我:Interop.Outlook - get all emails(Items) within a subfolder
我的问题是它只检索一些消息。我相信这与 Outlook 同步了多少邮件有关。如果我在 Outlook 中浏览文件夹,列表底部会显示“单击此处查看有关 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# 的例子,我都熟悉。
【问题讨论】:
-
我不认为这是 vb.net。
-
我个人使用了不同的 Interop DLL 来尝试解决这个问题,我删除了最后一行的 where-object 并将 select-object 修改为
*只是为了测试它以尝试帮助.它为我检索了 1500 个邮件对象。也许它只是你的 DLL?我在这里使用了一个,"C:\Program Files\Microsoft Office\root\Office16\ADDINS\Microsoft Power Query for Excel Integrated\bin\Microsoft.Office.Interop.Outlook.dll"- 如果使用不同的 dll 对你有用,请告诉我,以便我可以发布作为答案。 -
@shadoe2020 不,这些调整都没有帮助。这可能与您在 Outlook 中同步的数量有关。您的 Outlook 是否在超过 1500 个项目之前显示“单击此处查看更多”?
-
@Mary 这不是 VB.NET,但那是我的主要语言。但是,由于我的要求很简单,我最终用 PowerShell 编写了它。它应该相当容易阅读,并且您可以提供 VB/C# 示例(因为我怀疑是否会有 PowerShell 示例)。
标签: vb.net powershell outlook interop