Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从VBScript发送Outlook邮件时如何避免Outlook安全警报?_Vbscript_Outlook_Security Warning - Fatal编程技术网

从VBScript发送Outlook邮件时如何避免Outlook安全警报?

从VBScript发送Outlook邮件时如何避免Outlook安全警报?,vbscript,outlook,security-warning,Vbscript,Outlook,Security Warning,我有这样的情况: 代码必须在VBScript中(我无法控制) 无法在Outlook首选项中禁用编程访问限制(组策略,而不是管理员,并且Windows无法识别已安装的有效病毒扫描程序) 无法使用SMTP,因为它是不允许的 我认为用Outlook自动发送电子邮件是不可能的(在一个无人值守的框中,用户以锁定屏幕的身份登录)。我尝试了许多不同的方法,但总是得到安全警告信息。我怎样才能解决这个问题 我已经在有用的网站上尝试了所有方法,并取消了以下每个选项: 战略 理想情况下,自动化Outlook的应用

我有这样的情况:

  • 代码必须在VBScript中(我无法控制)
  • 无法在Outlook首选项中禁用编程访问限制(组策略,而不是管理员,并且Windows无法识别已安装的有效病毒扫描程序)
  • 无法使用SMTP,因为它是不允许的
我认为用Outlook自动发送电子邮件是不可能的(在一个无人值守的框中,用户以锁定屏幕的身份登录)。我尝试了许多不同的方法,但总是得到安全警告信息。我怎样才能解决这个问题

我已经在有用的网站上尝试了所有方法,并取消了以下每个选项:

战略
理想情况下,自动化Outlook的应用程序应该避免触发这些安全提示的代码

这正是我最后所做的(见下面的答案),这就是为什么该页面上的所有其他选项都是不相关的。让我们一个接一个地看:

发送消息
如果您的目标只是创建和发送电子邮件,则根本不需要使用Outlook对象。Microsoft提供了CDO for Windows库,用于创建和发送带有SMTP的邮件。使用此库完全绕过Outlook和MAPI,不会触发安全提示。有关代码示例,请参阅

SMTP。不行。网络策略不允许

对于所有可能触发安全提示的代码,请使用扩展MAPI,而不是Outlook对象、简单MAPI或CDO 1.21

扩展MAPI可能可以工作,但它极其繁琐,涉及大量C/C++代码(这不是本问题的主题;请参见上文),并且在不提示用户输入密码的情况下似乎不可能使用它

对于可能触发安全提示的所有代码,请使用第三方库(Redemption或MAPI33)。这种方法比使用扩展MAPI更容易,因为扩展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作为电子邮件服务器的公司环境中,可以通过WebDAV API(从Exchange 2000开始,从Exchange 2007开始)直接访问服务器上的数据

在我的环境中有残疾,可能还有其他人

在公司环境中,管理员可以选择为部分或所有用户放松Outlook安全性


当然可以,但这需要与网络团队进行沟通/协调/合作。如果管理权限不可用于安装COM加载项,则可能也不可用于解除组策略。

此代码在我的Outlook 2010系统上运行,以发送电子邮件而无需用户交互。这有点脆弱,因为如果用户在撰写邮件时正积极地在系统上工作(键入、单击),那么可能会出现用户输入进入弹出的窗口的情况,并在瞬间干扰邮件的发送,或者在邮件正文中添加额外的未知字符

只要系统上的用户
Sub SendEmail_Outlook()
    Set WshShell = WScript.CreateObject("WScript.Shell")
    Set ol=CreateObject("Outlook.Application") 
    Set Mail=ol.CreateItem(0) 
    Mail.to= "you@example.com"
    Mail.Subject = "test"
    Mail.HTMLBody = "test"
    Mail.Display    
    WshShell.SendKeys "%s"
    Set Mail = Nothing 
    Set ol = Nothing 
End Sub

SendEmail_Outlook