【问题标题】:Powershell S/MIMEPowershell S/MIME
【发布时间】:2016-11-20 12:38:04
【问题描述】:

目前,我的企业每天都需要使用 MS Outlook 发送和加密电子邮件。这个过程有效,但显然整个“每天都做这件事”很糟糕。我已经尝试寻找自动化流程的方法,这有助于我解决周围的流程,但我仍然找不到任何东西,或者自己制作任何可以处理电子邮件方面的东西。事件的流程是;

接收

  1. 收到加密邮件

  2. 电子邮件已打开并将附件拖到 UNC 共享 1(对收到的每封电子邮件重复)

  3. 附件被周边脚本拾取处理

发送

  1. 浏览 UNC 共享 2

  2. 将 x 个文件中的 1 个复制到新电子邮件中

  3. 将主题设置为完整文件名

  4. 在顶部功能区中选择要签名/加密的电子邮件

  5. 为 UNC 共享 2 中的每个文件发送电子邮件并重复此操作

我可以通过 powerhsell 和使用 S/MIME 发送带有附件的电子邮件,但是一旦我将两者结合起来,我就卡住了,脚本变成了瓦砾:(

任何帮助将不胜感激

【问题讨论】:

  • 您能与我们分享一些代码并告诉我们您的脚本在哪些地方不起作用吗?

标签: email powershell outlook smime


【解决方案1】:

如果我没记错的话,Powershell 可以加载和使用 .NET 程序集,对吗? (本人不是powershell用户,知识有限)。

鉴于此,我建议使用 MimeKitMailKit 库。

查看 MimeKit 自述文件,了解有关如何使用 S/MIME API 的一些示例。

MimeKit 附带一个 WindowsSecureMimeContext,您可以开箱即用,但这取决于您的私钥和证书的存储位置。如果它们不在 X509Store 中,那么您可以使用 TemporarySecureMimeContext 并将证书和私钥加载到其中并使用它。

【讨论】:

    【解决方案2】:

    遇到了类似的问题,这是我目前的解决方案,仍在测试中:

    $Outlook = New-object -ComObject Outlook.Application
    $Mail = $Outlook.CreateItem(0)
    $Mail.To = "me@company.tld"
    $Mail.Subject ="Test"
    $Mail.Body ="Test Body"
    
    # 0 = nothing, 1 = encrypt, 2 = sign, 3 = both!
    $PR_SECURITY_FLAGS = "http://schemas.microsoft.com/mapi/proptag/0x6E010003"
    $Mail.PropertyAccessor.SetProperty($PR_SECURITY_FLAGS, 3)
    
    $Mail.Send()
    

    如果 Outlook 正在运行,则一切正常。但是当我之后启动 Outlook 时,我会在发件箱中发现创建的邮件没有加密并且没有签名。

    如果没有运行 Outlook,代码会产生“InvokeMethodOnNull”错误。在 SetProperty()-Part 之前放置一个 $Mail.Display() 可以解决这个问题,并且在打开的电子邮件中似乎检查了按钮,但结果将是相同的:启动 Outlook 并且您的邮件在发件箱中未加密且未签名。

    【讨论】:

      猜你喜欢
      • 2011-09-07
      • 2012-10-04
      • 2010-09-12
      • 2019-03-04
      • 1970-01-01
      • 2014-09-16
      • 2012-05-16
      • 1970-01-01
      • 2012-03-15
      相关资源
      最近更新 更多