6

私はこの状況にあります:

  • コードはVBScriptに含まれている必要があります(私の制御外)
  • Outlook設定でプログラムによるアクセス制限を無効にできない(管理者ではなくグループポリシーであり、Windowsはインストールされている有効なウイルススキャナーを認識しません)
  • 許可されていないため、SMTPを使用できません。

Outlookを使用して自動化された方法で電子メールを送信する方法はないと思いました(画面がロックされた状態でユーザーとしてログインした無人のボックスで)。私はさまざまなアプローチを試しましたが、常にセキュリティ警告メッセージが表示されていました。どうすればこれを修正できますか?

私はすでにこの役立つサイトですべてを試し、次のように各オプションを削除しました。

戦略
理想的には、Outlookを自動化するアプリケーションは、これらのセキュリティプロンプトをトリガーするコードを回避する必要があります。

これはまさに私がやったことです(以下の私の答えを参照)。そのため、そのページの他のすべてのオプションは無関係です。それらを1つずつ取り上げましょう。

メッセージの送信
目的が単に電子メールメッセージを作成して送信することである場合は、Outlookオブジェクトを使用する必要はまったくありません。Microsoftは、SMTPを使用してメッセージを作成および送信するためのCDOforWindowsライブラリを提供しています。このライブラリを使用すると、OutlookとMAPIが完全にバイパスされ、セキュリティプロンプトはトリガーされません。コードサンプルについては、...を参照してください。

SMTP。立ち入り禁止。ネットワークポリシーにより許可されていません。

セキュリティプロンプトをトリガーする可能性のあるすべてのコードには、Outlookオブジェクト、Simple MAPI、またはCDO1.21の代わりにExtendedMAPIを使用します。

拡張MAPIは機能する可能性がありますが、非常に面倒で冗長であり、多くのC / C ++コードが含まれ(この質問のトピックではありません。上記を参照)、ユーザーにパスワードの入力を求めずに使用することは不可能のようです。

セキュリティプロンプトをトリガーする可能性のあるすべてのコードには、サードパーティのライブラリ(RedemptionまたはMAPI33)を使用します。このアプローチは、学習曲線が急で、ほぼ同じくらい安全な拡張MAPIを使用するよりも簡単です。これらのライブラリは、Outlookコードプロジェクトを支援する追加機能も提供します。

サードパーティのライブラリの問題は4つあります。-コストがかかります。-無料であってもライセンスの問題が発生します(一部の組織では、ソフトウェアをエコシステムに導入する前に、弁護士による広範な審査が必要です)。-この問題全体が懸念されるほとんどの環境は、ユーザーがOutlookオプションでプログラムによるアクセス警告を無効にできない環境です。うーん、それらはどのような可能性がありますか?それは...企業環境かもしれません?企業環境でのソフトウェアの調達には非常に長い時間がかかり、ソフトウェアを使用することによるコスト削減が数百万ドルを超えない限り、実用的ではありません。しかし、ソフトウェアの調達が必要な場合、コスト削減ほど高くはないが、サードパーティのソフトウェアを調達するために、総節約よりも多くの費用と労力を要する、多くの実用的なプロセス改善を行うことができます。-ネットワーク管理者は、悪意のある目的で使用される可能性があるため、ソフトウェアがシステム上に存在することを信頼しない可能性があります。

アプリケーションとともに、セキュリティプロンプトを抑制するツールをデプロイします。

これは、OMGプロンプトの抑制が必要であることを前提としていますが、私の場合は、単純な電子メールを送信するだけではありません(私の回答を参照)。

Outlook 2007の場合、マシンが最新のウイルス対策アプリケーションを実行していることを確認し、CDO1.21およびSimpleMAPIコードを避けてOutlookオブジェクトを使用してすべてのコーディングを行います。

ウイルススキャナーは最新ですが、バージョンやベンダーを変更することは完全に私の制御不能であり、Outlookはそれを認識しません。「ウイルス対策の状態:無効です。このバージョンのWindowsはウイルス対策の検出をサポートしていますが、ウイルス対策が見つかりませんでした。」

Outlookカスタムフォームコード、Outlook VBAコード、およびCOMアドインでは、VBAまたはアドインアーキテクチャによって提供されるOutlook.Applicationオブジェクトからすべてのオブジェクトを派生させます。たとえば、以下のサンプルVBA「スクリプトの実行」ルール手順を参照してください。

興味深い、そしておそらく有用ですが、必須ではありません。これにより、ソフトウェアを展開するためにOutlookでルールを設定することに不必要な依存関係が生じ、展開が複雑になります。

特定のCOMアドインを「信頼」する、またはすべてのアプリケーションがアドレスへのアクセスなどの特定の機能に無制限にアクセスできるようにするOutlookセキュリティ設定を展開します。Outlook 2007より前のバージョンでは、これにはMicrosoftExchangeServerが必要です。Outlook 2007については、以下のバージョン固有の考慮事項に関するセクションを参照してください。

面倒:COMアドインをインストールするには、管理アクセスが必要であり、組織によっては管理アクセスを取得するのが難しい場合があります。

Exchangeが電子メールサーバーである企業環境では、サーバー上のデータへの直接アクセスは、Exchange2000以降のWebDAVAPIを介して、およびExchange2007以降のExchangeWebサービスを介して利用できます。

私の環境、そしておそらく他の環境では無効になっています。

企業環境では、管理者は一部またはすべてのユーザーのOutlookセキュリティを緩めることを選択できます。

もちろんですが、これにはネットワークチームとのコミュニケーション/調整/協力が必要です。COMアドインをインストールするための管理アクセスが利用できない場合は、グループポリシーを緩めるためにも利用できない可能性があります。

4

2 に答える 2

11

このコードは、Outlook 2010を使用するシステムで機能し、ユーザーの操作なしで電子メールを送信します。メールの作成時にユーザーがシステムでアクティブに作業している(入力、クリック)と、ユーザー入力が一瞬ポップアップするウィンドウに入る可能性があるという点で、少し脆弱です。メールの送信を妨害するか、メールの本文に不明な文字を追加します。

これを実行しているシステムのユーザーがこれを認識しており、誤ったキーストローク干渉の潜在的な結果がビジネスクリティカルでない限り、この機能は許容されます。

MailItem.Send注意すべき重要な点:このソリューションの鍵は、メソッドを呼び出さないことです。これは、プログラムによるアクセス保護をトリガーする方法です。代わりに、ALT+sショートカットをトリガーします。デフォルトでは、メールウィンドウがOutlookでフォーカスを持っているときに、[送信]ボタンを押します。デフォルトのスペルチェックプロンプトを有効にしている場合は、スペルチェックのプロンプトがさらにポップアップ表示されます。スペルチェックプロンプトはセキュリティ関連のダイアログではないため、SendKeysを追加してクリックすることもできますが、私たちの解決策はスペルチェックプロンプトを無効にすることでした。

UIPI(ユーザーインターフェイス特権の分離)に関する注意:

Outlook 2010は、システムにログインしたユーザーとして、中程度の整合性レベルで実行されます。Windowsエクスプローラーによって起動されたプログラム、または同様の方法で起動されたプログラムの子または子孫として起動されたプログラムも、中程度の整合性レベルで起動されます。UIPIは、ユーザーIDとセッションIDが一致し、整合性レベルが同じかそれ以上である限り、「SendKeys」タイプの入力を防ぐのに効果的ではありません。私の特定の環境では、ユーザーIDとセッションIDは同一であり、整合性レベルはVBScriptホストプロセスとOutlookプロセスで同じです。ご使用の環境では、これらの条件のいずれかがfalseの場合、このコードは機能しません。また、バージョン2010より前または後のバージョンのOfficeでもテストされていません。

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タスクスケジューラのプロパティ

于 2013-02-15T16:14:09.290 に答える
0

いくつかのオプション:

  1. 最新のウイルス対策ソフトウェア(Outlookはプロンプトを表示しません)
  2. 拡張MAPI(C ++またはDelphi、VBスクリプトの場合は適用されません)。ただし、拡張MAPIを使用するが、VBSを含む任意の言語からアクセスできるRedemptionのようなラッパーを使用できます。
  3. ClickYesのような製品。

議論と利用可能なオプションのリストについては、http://www.outlookcode.com/article.aspx?id=52を参照してください。

于 2016-02-26T23:26:33.867 に答える