[英]How to avoid Outlook Security Alert when sending Outlook message from VBScript?
我有這種情況:
我認為沒有辦法以自動方式使用 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(如果您不是管理員帳戶,則為“中”)。
一些選擇:
有關討論和可用選項列表,請參見http://www.outlookcode.com/article.aspx?id=52 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.