我正在进入这个项目,其中必须交叉检查推入文件夹的电子邮件是否到达。 因此,为了达到这个目的,我使用了powershell脚本连接到邮件文件夹并收集数据。 代码粘贴在下方。
Add-Type $class -ReferencedAssemblies Microsoft.Office.Interop.Outlook
$class = @"
using Microsoft.Office.Interop.Outlook;public class MyOL
{
public MAPIFolder GetInbox(string userName)
{
Application oOutlook = new Application();
NameSpace oNs = oOutlook.GetNamespace("MAPI");
Recipient oRep = oNs.CreateRecipient(userName);
MAPIFolder inbox = oNs.GetSharedDefaultFolder(oRep, OlDefaultFolders.olFolderInbox);
return inbox;
}
}
"@
Add-Type $class -ReferencedAssemblies Microsoft.Office.Interop.Outlook
$MyOL = New-Object MyOL
$olInbox = $MyOL.GetInbox("mailbox")
$olInbox.items | Select-Object -Property Subject, ReceivedTime, Importance, SenderName
但是此代码正在收集仅一周的数据!而不是新鲜的电子邮件。我试过环顾四周,发现这可能与邮箱中的索引有关。所以,我也试过禁用它,但徒劳无功。
答案 0 :(得分:0)
不确定为什么不使用ComObject for Outlook。如果您只想要最近的项目,那么这应该可以获得过去24小时内收到的项目:
$MSOut = new-object -ComObject Outlook.Application
$MAPI = $MSOut.GetNamespace("MAPI")|?{$_.SMTP -match "Some.User@Company.com"}
$Account = $MAPI.Folders|?{$_.Name -match "Some.User@Company.com"}
$Inbox = $Account.folders | ?{$_.Name -match "Inbox"}
$24hours = (get-date).AddDays(-1)
$RecentItems = $Inbox.Items|?{$_.ReceivedTime -gt $24hours}
如果你想获得某些属性,你可以运行你的选择,如:
$RecentItems | Select -Property Subject, ReceivedTime, Importance, SenderName