【问题标题】:Using Outlook PropertyAccessor in Powershell在 Powershell 中使用 Outlook PropertyAccessor
【发布时间】:2016-06-03 21:17:25
【问题描述】:

我正在尝试在 Powershell ISE 中执行一项简单的任务。 我希望能够阅读电子邮件的内容和标题,并使用write-host 在控制台中打印。

我想打印发件人的姓名,然后是他的地址。我想打印出收件人和电子邮件的主题,然后是邮件的正文/内容。我虽然这将是一件容易的事,但我遇到了一个小挫折。

为了尽量减少返回值,我创建了一个文件夹,里面只有一封电子邮件和一条短消息,以便打印和确认。


问题:

我只能打印出我想要的字段之一。当我运行脚本时,我只得到“主题”字段的值。所有其他人(SenderName、SenderAddress、To)都没有给出值,但经过研究,我确认我确实获得了这些属性的对象。


代码

Add-Type -assembly "Microsoft.Office.Interop.Outlook"
$Outlook = New-Object -ComObject Outlook.Application
$namespace = $Outlook.GetNameSpace("MAPI")

$box = $namespace.GetDefaultFolder([Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderJunk)
$mails = $box.items
    
$mails|select  SenderName, SenderEmailAddress, To, Subject

返回值

  • 这些字段是否可以通过我的交换服务器中的某种安全措施来保护?

  • 我的代码有什么问题吗?

  • 为什么我不能访问这些值?我该如何解决这个问题?

我对 Outlook 的 Powershell 脚本非常陌生,但在将问题发布到此处之前,我已经对我的问题进行了相当多的研究,但我根本找不到任何解释。 我已经阅读了一些有关称为 PropertyAccessor 的信息,但从未找到用于 powershell 的信息,仅适用于 vba。这可能是一个可能的解决方案吗?

谢谢。

【问题讨论】:

  • @Matt 当我将其更改为例如:$m.GetProperty($m.SenderName) 我得到错误:Method invocation failed because [System.__ComObject] doesn't contain a method named 'GetProperty'.

标签: email powershell outlook


【解决方案1】:

默认情况下,您尝试打印的字段应该可用 afaik。

我假设这可能与您在打印属性时打印和连接属性的方式有关。

如果您执行以下操作,它应该会显示发件人电子邮件地址的整个容器内容:

foreach($m in $mails){
    write-host "From:    $($m.GetProperty) $($m.SenderEmailAddress)"
    write-host "Subject:   $($m.Subject)"
}  

我建议不要使用 for 循环和使用 write-host,而是只选择所需的属性。

例子:

$mails|select SenderEmailAddress, SenderName, Subject, ReceivedTime

您还可以通过执行以下操作来检查邮件对象上可用的属性:

$mails|get-member

在此处的 Outlook 2007 实例上对此进行了测试,该实例似乎可以正常工作。

希望这会有所帮助:)

【讨论】:

  • 我已将问题编辑到您添加的信息中。更改结果也已发布,请查看。如您所见,没有变化。我已经使用| gm 命令多次检查并尝试访问属性值,但没有一个我需要提供更多详细信息。只告诉我这是System.__ComObject,但我无法读出它的详细信息。
  • 您运行的是哪个版本的 Outlook?有一个安全更新;如果已安装,将在访问 com 时“要求”用户提示(尽管隐藏),导致地址失败/或为空。如果您尝试对消息本身使用“回复”并从此对象获取收件人,这也会发生。因此,如果是这种情况,您需要一种解决方法。您可以查看解决此问题的 Redemption 库:dimastr.com/redemption/home.htm
  • 如果您使用的是较新的交换服务器,我强烈建议您使用旧式 com 对象以外的其他东西!除非你依赖 COM
  • 还没有考虑很多替代方案。有一些使用 Powershell com 对象的想法,所以我只是在寻找使用它们。目前使用 Outlook 2010。我将尝试使用兑换库来解决任何可能的安全措施,并让您知道是否有任何帮助。您能否向我提供有关此安全补丁的一些文档,以便我了解原因和方法?谢谢! ;)
  • 补丁相当老,但仍然适用于新版本。这个网站有一个相当不错的总结:slipstick.com/outlook/outlook-email-security-update。我想他们也写了一些关于补丁和兑换提供者的东西。
猜你喜欢
  • 1970-01-01
  • 2014-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 2021-05-22
  • 2019-04-04
相关资源
最近更新 更多