2016-03-01 82 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”。 –