我正在使用 PowerShell 腳本從具有多個附件的電子郵件中下載附件。
如果我使用以下陳述句,它將下載所有附件。
# Find Unread mail messages
$UnreadMessages = $Inbox.Items | where-object {$_.Unread -and $_.SenderEmailAddress -imatch "usa"}
我只想使用以下陳述句下載特定附件,但它什么也沒提供。
# Find Unread mail messages
$UnreadMessages = $Inbox.Items | where-object {$_.Unread -and $_.SenderEmailAddress -imatch "usa" -and $_.Attachments -imatch "Backlog"}
請幫我糾正這個說法
uj5u.com熱心網友回復:
首先,您的代碼將導致您的腳本下載和處理所有收件箱訊息。這就像沒有 WHERE 子句的 SQL 中的 SELECT 陳述句 - 就像它在性能方面一樣糟糕。
使用Items.Find/FindNext或Items.Restrict(請參閱https://docs.microsoft.com/en-us/office/vba/api/outlook.items.find) - 讓服務器/訊息存盤完成作業。對于您的第一個查詢,請使用
@SQL=("urn:schemas:httpmail:read" = 0) AND ("http://schemas.microsoft.com/mapi/proptag/0x0065001F" like '%usa%')
對于第二個查詢,即使擴展 MAPI(僅限 C 或 Delphi)公開了該功能(創建并指定為搜索屬性),OOM 也不允許您搜索RES_SUBRESTRICTION附件PR_MESSAGE_ATTACHMENTS名稱PR_ATTACH_LONG_FILENAME。當然,您可以只使用您的第一個查詢并回圈查詢匹配項,因為每個條目回圈遍歷集合Attachment中的每個物件MailItem.Attachments- 遠非理想,但仍然比沒有限制要好。
如果使用Redemption(我是它的作者 - 它是擴展 MAPI 包裝器,可以從任何語言使用)是一個選項,它允許Attachments在查詢中使用。類似于以下內容(在我的腦海中,VBA):
set Session = CreateObject("Redemption.RDOSession")
Session.MAPIOBJECT = Application.Session.MAPIOBJECT
set Folder = Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox)
set restrItems = Folder.Items.Restrict(" (UnRead = 'true') AND (""http://schemas.microsoft.com/mapi/proptag/0x0065001F"" like '%usa%') AND (Attachments LIKE '
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/462223.html
上一篇:如何將缺失的行(包含頁碼的URL)添加到陣列(如Linux中的seq)
下一篇:制作隨機SID生成器
