2016-03-01 25 views
2

我有一個關於Powershell中的Outlook規則的問題。我寫了一些代碼,可以將來自某個發件人的任何傳入電子郵件成功存儲到已刪除郵件文件夾中。我這樣做是因爲當郵件進入垃圾文件夾時,垃圾文件夾仍然有郵件的反標記,所以最後會說我在垃圾文件夾中有10封郵件。Powershell中的一個Outlook規則的多個操作

我想避免這種情況,只需將來自該發件人的郵件投遞到已刪除郵件文件夾,並將郵件標記爲「已讀」,以便在已刪除郵件文件夾中看不到雜亂無章的郵件。

真正的問題是:

  • 我可以多個動作添加到PowerShell中的相同前景規則?如果是這樣,怎麼樣?
  • 「運行腳本」操作的語法/代碼是什麼?

我迄今爲止代碼:

$ol = New-Object -ComObject Outlook.Application 
$ns = $ol.GetNamespace("MAPI") 

$olFolders = "Microsoft.Office.Interop.Outlook.OlDefaultFolders" 
$outlook = New-Object -ComObject outlook.application 
$namespace = $Outlook.GetNameSpace("MAPI") 

$inBox = $ns.GetDefaultFolder([Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderInbox) 
$deleted = $ns.GetDefaultFolder([Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderDeletedItems) 

$rules = $outlook.session.DefaultStore.GetRules() 
$rule = $rules.create("Move mail: to DeletedItems", [Microsoft.Office.Interop.Outlook.OlRuleType]::olRuleReceive) 

$rule_Address = $rule.Conditions.SenderAddress 
$rule_Address.Enabled = $true 
$rule_Address.Address = @("<Sender Address>") 
$action = $rule.Actions.MoveToFolder 
$action.Enabled = $true 

[Microsoft.Office.Interop.Outlook._MoveOrCopyRuleAction].InvokeMember("Folder",[System.Reflection.BindingFlags]::SetProperty,$null, $action, $deleted) 

$rules.Save() 

此代碼的工作至今。

請幫忙。 謝謝!

回答

4

我可以將多個操作添加到PowerShell中的相同Outlook規則嗎?如果是這樣,怎麼樣?

採取了一點,但我有一個工作測試,使用多個操作應用於單個規則。這實際上很簡單,你只需要重複你已經完成的步驟並創建一個不同的動作變量。

在我的示例中,僅顯示代碼的結尾,我添加了一個操作在New Item Alert窗口中顯示消息。

... 
$action = $rule.Actions.MoveToFolder 
$action.Enabled = $true 

$anotherAction = $rule.Actions.NewItemAlert 
$anotherAction.Text = "I am awesome!" 
$anotherAction.Enabled = $true 

[Microsoft.Office.Interop.Outlook._MoveOrCopyRuleAction].InvokeMember("Folder",[System.Reflection.BindingFlags]::SetProperty,$null, $action, $deleted) 

$rules.Save() 

你很可能已經嘗試過這樣的事情。如果沒有,您需要了解的重要參考資料。

「運行腳本」操作的語法/代碼是什麼?

這是您不能按照this reference for Office 2007this one for Office 2010/2013以編程方式設置的操作之一。這些表格很相似,並且包含在這裏,但我會參考你的第二個項目符號。

Action            : Start a script 
Constant in olRuleActionType      : olRuleActionRunScript 
Supported when creating new rules programmatically? : No 
Apply to olRuleReceive rules?      : Yes 
Apply to olRuleSend rules?       : No 

還有其他的以及你在哪裏限制。所以當你制定規則時你需要記住這一點。

+0

它工作添加多個操作。我似乎無法理解的是如何包含「運行腳本」操作或任何其他有關此事的限制規則(例如「MarkRead」)。 –

+0

@TomKustermans在鏈接中提供了Office 2010/2013的答案,它表示在創建新規則時不能以編程方式完成「標記爲已讀/ olRuleActionMarkRead」。 –