在服务器上通过 PowerShell 发送电子邮件

Sending Emails through PowerShell on a server

提问人:Djaq Harris 提问时间:11/17/2023 最后编辑:Eugene AstafievDjaq Harris 更新时间:11/17/2023 访问量:32

问:

我正在通过 PowerShell 脚本从服务器自动发送电子邮件。当我这样做时,我收到以下提示:

程序正在尝试访问存储在 Outlook 中的电子邮件地址信息

当我查看信任中心中的选项时,我发现它无法监控防病毒软件是否已安装/过期/最新。

信任中心中的编程访问安全性

我想知道当前选择的选项(绿色下划线)在功能上是否与“不推荐”选项(红色下划线)相同,因为黄色突出显示了提示。

PowerShell 安全 Outlook Windows-Server Office-Automation

评论

0赞 Olaf 11/17/2023
您想从服务器发送电子邮件,并且想使用Outlook进行发送?您是否在服务器上安装了 Outlook?你为什么不使用?Send-MailMessage
0赞 Djaq Harris 11/21/2023
Send-MailMessage 在 PowerShell 脚本中使用。这就是它实际发送电子邮件的方式。但是,它正在电子邮件收件箱中查找数据,以便能够通过对另一个程序的 API 调用来提取元数据。

答:

0赞 Eugene Astafiev 11/17/2023 #1

这些选项无助于弥合与安全问题的差距。我建议以编程方式禁止此类安全警告,或者通过使用不会触发安全提示的低级 API 来避免它们:

  1. 使用第三方组件禁止显示 Outlook 安全警告。有关详细信息,请参阅 Microsoft Outlook 安全管理器

  2. 使用低级别 API 而不是 OOM - 扩展 MAPI,它不会触发此类安全提示。或围绕该 API 的任何其他第三方包装器,例如 Redemption。

  3. 开发有权访问受信任的 Application 对象的 COM 加载项。

  4. 使用组策略对象设置计算机。


另一个方面是,Microsoft 目前不建议也不支持从任何无人参与的非交互式客户端应用程序或组件(包括 ASP、ASP.NET、DCOM 和 NT Services)自动化 Microsoft Office 应用程序,因为在此环境中运行 Office 时,Office 可能会表现出不稳定的行为和/或死锁。

如果要生成在服务器端上下文中运行的解决方案,则应尝试使用已安全用于无人参与执行的组件。或者,您应该尝试找到允许至少部分代码在客户端运行的替代方法。如果从服务器端解决方案使用 Office 应用程序,则该应用程序将缺少成功运行所需的许多功能。此外,您将承担整体解决方案稳定性的风险。有关详细信息,请参阅 Office 服务器端自动化的注意事项一文。

评论

0赞 Djaq Harris 11/21/2023
我不需要弥合问题之间的差距,只需禁用提示即可运行我的脚本。
0赞 Eugene Astafiev 11/21/2023
很高兴我的帖子有助于避免Outlook中的安全提示。
0赞 Djaq Harris 11/21/2023 #2

由于 Outlook 无法检查是否有活动的防病毒软件在运行,我与我的团队确认服务器上的防病毒软件将自动更新,由公司资助,使其不会过期,并已安装。因此,第一个和第三个选项在功能上是相同的。这是因为无论防病毒程序是否正在运行,Outlook 都不会知道,并且会发出提示警告我外部程序正在尝试使用收件箱。

通过选择第三个选项,我能够使脚本正确运行,而无需用户在生成的提示中重复选择“允许”。

评论

1赞 zerocukor287 11/24/2023
我有点困惑你在说什么选项。这些是尤金的答案吗?