簡體   English   中英

從 VBScript 發送 Outlook 消息時,如何避免 Outlook 安全警報?

[英]How to avoid Outlook Security Alert when sending Outlook message from VBScript?

我有這種情況:

  • 代碼必須在 VBScript(我無法控制)
  • 無法在 Outlook 首選項中禁用編程訪問限制(組策略,而不是管理員,Windows 無法識別已安裝的有效病毒掃描程序)
  • 不能使用 SMTP,因為它是不允許的。

我認為沒有辦法以自動方式使用 Outlook 發送 email(在無人值守的盒子上,以用戶身份登錄並鎖定屏幕)。 我嘗試了許多不同的方法,但總是會收到安全警告消息。 我怎樣才能解決這個問題?

我已經在這個有用的站點上嘗試了所有方法,並消除了每個選項,如下所示:

攻略
理想情況下,自動化 Outlook 的應用程序應該避免觸發這些安全提示的代碼。

正是我最終所做的(見下面我的回答),這就是為什么該頁面上的所有其他選項都不相關的原因。 讓我們一一列舉:

發送信息
如果您的目標只是創建和發送 email 消息,則根本沒有必要使用 Outlook 對象。 微軟提供了CDO for Windows庫,用於用SMTP創建和發送消息。使用這個庫完全繞過Outlook和MAPI,不會觸發安全提示。 有關代碼示例,請參閱...

SMTP。不行。 網絡政策不允許。

對於可能觸發安全提示的所有代碼,使用擴展 MAPI 而不是 Outlook 對象、簡單 MAPI 或 CDO 1.21。

擴展 MAPI 可能有效,但它非常繁瑣和冗長,並且涉及大量 C/C++ 代碼(這不是這個問題的主題;見上文),而且似乎無法在不提示用戶輸入密碼的情況下使用它。

對所有可能觸發安全提示的代碼使用第三方庫——Redemption 或 MAPI33。 這種方法比使用擴展 MAPI 更容易,后者具有陡峭的學習曲線,而且幾乎同樣安全。 這些庫還提供其他功能來幫助 Outlook 代碼項目。

第三方圖書館的問題有四個方面: - 他們花錢; - 即使它們是免費的,它們也會引入許可問題(一些組織在允許軟件進入生態系統之前需要律師的廣泛審查); - 整個問題甚至是一個問題的大多數環境是用戶無法在 Outlook 選項中禁用編程訪問警告的環境。 嗯,那些可能的情況是什么? 可能是……公司環境 在企業環境中采購軟件需要的時間過長,以至於不切實際,除非使用它節省的成本超過數百萬美元。 但是,可以進行許多實際的流程改進,這些改進不會產生那么高的成本節約,但如果有必要進行軟件采購,那么采購第三方軟件所花費的金錢和勞動力將超過總節約。 - 網絡管理員可能不相信該軟件駐留在系統上,因為它可能被用於惡意目的。

在您的應用程序中部署一個工具來抑制安全提示。

這假設有必要抑制OMG 提示,在我的情況下,它不是,只是發送一個簡單的 email(見我的回答)。

對於 Outlook 2007,請確保機器正在運行最新的防病毒應用程序,並使用 Outlook 對象進行所有編碼,避免使用 CDO 1.21 和簡單 MAPI 代碼。

病毒掃描程序是最新的,但我完全無法控制更改其版本或供應商,並且 Outlook 無法識別它。 它說:“殺毒狀態:無效。Windows這個版本支持殺毒檢測,但沒有發現殺毒。”

在Outlook自定義窗體代碼、Outlook代碼、VBA代碼和COM加載項中,從Outlook派生所有對象。VBA提供的應用程序object或加載項架構。 例如,請參閱下面的示例 VBA“運行腳本”規則過程。

有趣,可能有用,但不是必需的。 這會不必要地依賴於在 Outlook 中設置規則來部署軟件,這會使部署變得復雜。

部署 Outlook 安全設置,“信任”某些 COM 加載項或允許所有應用程序不受限制地訪問某些功能,例如訪問地址。 在 Outlook 2007 之前的版本中,這需要 Microsoft Exchange Server。 對於 Outlook 2007,請參閱下面有關版本特定注意事項的部分。

繁瑣:安裝 COM 加載項需要管理訪問權限,並且在某些組織中很難獲得管理訪問權限。

在 Exchange 是 email 服務器的企業環境中,從 Exchange 2000 開始,通過 WebDAV API 可以直接訪問服務器上的數據,從 Exchange 2007 開始,可以通過 Exchange Web 服務。

在我的環境中被禁用,可能還有其他人。

在公司環境中,管理員可以選擇放松 Outlook 部分或所有用戶的安全措施。

當然可以,但這需要與.network 團隊進行溝通/協調/合作。 如果管理訪問權限不可用於安裝 COM 插件,則它可能也不可用於放松組策略。

此代碼適用於我的Outlook 2010系統,用於發送沒有用戶交互的電子郵件。 有點脆弱,因為如果用戶恰好在編寫郵件時正在系統上工作(打字,點擊),可能會發生用戶輸入進入彈出一瞬間的窗口,要么干擾郵件的發送,要么在郵件正文中添加額外的未知字符。

只要運行其系統的用戶意識到這一點,並且虛假按鍵干擾的潛在后果不是關鍵業務,則此功能是可接受的。

需要注意的重要事項:此解決方案的關鍵是我們不調用MailItem.Send方法。 這是觸發程序化訪問保護的方法。 相反,我們觸發ALT + s快捷方式,默認情況下,當郵件窗口在Outlook中具有焦點時,按下“發送”按鈕。 如果您啟用了默認的拼寫檢查提示,則會彈出進一步的拼寫檢查提示。 我們的解決方案是禁用拼寫檢查提示,但我確信您可以添加更多SendKeys來點擊它,因為拼寫檢查提示不是與安全相關的對話框。

關於UIPI(用戶界面權限隔離)的說明:

Outlook 2010以登錄系統的用戶身份運行,具有中等完整性級別。 由Windows資源管理器啟動的程序,或作為以類似方式啟動的程序的子代或后代啟動的程序,也將以中等完整性級別啟動。 只要用戶和會話ID匹配,並且完整性級別相同或更高,UIPI就無法有效地阻止“SendKeys”類型輸入。 在我的特定環境中,用戶和會話ID是相同的,並且VBScript主機進程和Outlook進程的完整性級別相同。 在你的環境中,如果任何條件都是假的,這個代碼將無法正常工作。 它在早期版本或更高版本的Office上也未經過測試,而不是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

此外,以下是從Windows任務計划程序運行VBScript時如何使此工作。 只需勾選紅色橢圓形“最高權限運行”所示的框,使其以最高可能的完整性級別運行而不提升UAC(如果您不是管理員帳戶,則為“中”)。

Windows任務調度程序屬性

一些選擇:

  1. 最新的防病毒軟件(Outlook將不會顯示提示)
  2. 擴展MAPI(C ++或Delphi,不適用於VB腳本)。 但是,您可以使用像Redemption這樣的包裝器,它使用擴展MAPI,但可以從任何語言(包括VBS)訪問。
  3. ClickYes這樣的產品。

有關討論和可用選項列表,請參見http://www.outlookcode.com/article.aspx?id=52

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM