我有这种情况:
- 代码必须在 VBScript 中(不在我的控制范围内)
- 无法在 Outlook 首选项中禁用编程访问限制(组策略,而不是管理员,并且 Windows 无法识别已安装的有效病毒扫描程序)
- 不能使用 SMTP,因为它是不允许的。
我认为没有办法使用 Outlook 以自动方式发送电子邮件(在无人看管的盒子上以屏幕锁定的用户身份登录)。我尝试了许多不同的方法,但总是会收到安全警告消息。我怎样才能解决这个问题?
我已经在这个有用的网站上尝试了所有方法,并消除了每个选项,如下所示:
策略
理想情况下,自动化 Outlook 的应用程序应该避免触发这些安全提示的代码。
这正是我最终做的事情(请参阅下面的答案),这就是为什么该页面上的所有其他选项都不相关的原因。让我们一一来看:
发送消息
如果您的目标只是创建和发送电子邮件消息,则根本不需要使用 Outlook 对象。Microsoft 提供了用于使用 SMTP 创建和发送消息的 CDO for Windows 库。使用此库完全绕过 Outlook 和 MAPI,并且不会触发安全提示。有关代码示例,请参阅...
SMTP。不行。网络策略不允许。
对于所有可能触发安全提示的代码,请使用扩展 MAPI 而不是 Outlook 对象、简单 MAPI 或 CDO 1.21。
扩展的 MAPI 可能会起作用,但它非常繁琐和冗长,并且涉及大量 C/C++ 代码(这不是这个问题的主题;见上文),并且在不提示用户输入密码的情况下似乎无法使用它。
对所有可能触发安全提示的代码使用第三方库——Redemption 或 MAPI33。这种方法比使用扩展 MAPI 更容易,后者具有陡峭的学习曲线,并且几乎同样安全。这些库还提供其他功能来帮助处理 Outlook 代码项目。
第三方库的问题有四个方面: - 他们花钱;- 即使它们是免费的,它们也会引入许可问题(一些组织在允许软件进入生态系统之前需要律师的广泛审查);- 整个问题甚至令人担忧的大多数环境是用户无法在 Outlook 选项中禁用编程访问警告的环境。嗯,那些可能的情况是什么?会不会是……企业环境? 在企业环境中采购软件需要很长时间,以至于不切实际,除非使用它所节省的成本将超过数百万美元。但是,可以进行许多实际的流程改进,这些改进不会产生那么高的成本节约,但如果需要软件采购,采购第三方软件所花费的金钱和劳动力将超过总节约成本。- 网络管理员可能不相信该软件驻留在系统上,因为它可能被用于恶意目的。
使用您的应用程序部署一个工具来抑制安全提示。
这假设抑制OMG 提示是必要的,在我的情况下,它不是,只是发送一封简单的电子邮件(见我的回答)。
对于 Outlook 2007,请确保计算机正在运行最新的防病毒应用程序并使用 Outlook 对象进行所有编码,避免使用 CDO 1.21 和简单 MAPI 代码。
病毒扫描程序是最新的,但我完全无法控制更改其版本或供应商,并且 Outlook 无法识别它。它说:“防病毒状态:无效。此版本的 Windows 支持防病毒检测,但未找到防病毒。”
在 Outlook 自定义表单代码、Outlook VBA 代码和 COM 加载项中,从 VBA 或加载项体系结构提供的 Outlook.Application 对象派生所有对象。例如,请参阅下面的示例 VBA“运行脚本”规则过程。
有趣,可能有用,但不是必需的。这对在 Outlook 中设置规则以部署软件产生了不必要的依赖,这使部署复杂化。
部署“信任”某些 COM 加载项或允许所有应用程序不受限制地访问某些功能(例如访问地址)的 Outlook 安全设置。在 Outlook 2007 之前的版本中,这需要 Microsoft Exchange Server。对于 Outlook 2007,请参阅下面有关版本特定注意事项的部分。
繁琐:安装 COM 插件需要管理权限,并且在某些组织中很难通过管理权限获得。
在以 Exchange 为电子邮件服务器的企业环境中,可以通过从 Exchange 2000 开始的 WebDAV API 以及从 Exchange 2007 开始的 Exchange Web 服务直接访问服务器上的数据。
在我的环境中禁用,可能还有其他环境。
在公司环境中,管理员可以选择为部分或所有用户放松 Outlook 安全性。
当然可以,但这需要与网络团队进行沟通/协调/合作。如果管理访问不可用于安装 COM 插件,则它也可能不可用于放松组策略。