暗号化 Outlook アドインを作成する

メール通信をセキュリティで保護するために、Outlook アドインにカスタム暗号化と暗号化解除機能を実装します。 OnMessageDecrypt イベントを使用すると、アドインは暗号化されたメッセージを自動的に識別し、暗号化解除、コンテンツの表示、エラー通知を処理できます。

暗号化と暗号化解除のワークフローの概要

ヒント

  • 暗号化と暗号化解除のワークフローでは、イベント ベースのアクティブ化機能が実装されています。 Outlook アドインでのイベント ベースのアクティブ化に慣れていない場合は、まずその機能とその実装について学習することをお勧めします。 詳細については、「 イベントを使用してアドインをアクティブ化する」を参照してください。
  • 最小要件セットとサポートされるプラットフォームは、このセクションで推奨される API ごとに異なる場合があります。 Outlook JavaScript API 要件セットに対する要件を確認し、特定の API のドキュメントで補足することをお勧めします。

次の表に、Outlook アドインの暗号化と暗号化解除のワークフローの概要を示します。 また、ステップでカスタム ソリューションが必要かどうか、または Office JavaScript (Office.js) API ライブラリでサポートされているかどうかを識別します。

手順 実装
ユーザーがメッセージを作成し、アドインを使用して暗号化規則を適用する アドインがメッセージとその添付ファイルの内容をセキュリティで保護できるように、独自の暗号化プロトコルを実装する必要があります。
ユーザーがメッセージを送信する OnMessageSend イベントのハンドラーを実装して、ユーザーが [送信] を選択したときにアドインで暗号化プロトコルを自動的に実行できるようにします。

暗号化解除プロセス中にアドインを使用して暗号化されたメッセージを識別するには、 インターネット ヘッダー API を 使用してヘッダーをメッセージに追加します。 ヘッダー キーは、アドインのマニフェストの OnMessageDecrypt イベントの <LaunchEvent> 要素の HeaderName 属性で指定された値と一致する必要があります。 詳細については、「 イベント ベースのアクティブ化を使用して復号化を実装する」を参照してください。
受信者は暗号化されたメッセージを受信して開きます 受信者に Outlook にインストールされているメッセージの暗号化に使用されたアドインと同じアドインがある場合、アドインは、メッセージに含まれるヘッダー キーがマニフェストの OnMessageDecrypt イベントに指定された値と一致するかどうかを確認します。 この操作は、OnMessageDecrypt イベントを処理するアドインによって自動的に実行されるため、チェックを手動で実装する必要はありません。 ヘッダーが一致すると、 OnMessageDecrypt イベントが発生し、そのハンドラーが実行されます。 詳細については、「 イベント ベースのアクティブ化を使用して復号化を実装する」を参照してください。
アドインによってメッセージの暗号化が解除される OnMessageDecrypt イベント ハンドラーに独自の復号化プロトコルを実装する必要があります。 アドインがメッセージとその添付ファイルを暗号化解除している間に、アドインによってメッセージが処理されていることをユーザーに警告する通知がユーザーに表示されます。 この通知は、 OnMessageDecrypt イベントを処理するアドインによって自動的に表示されるため、手動でイベントを作成する必要はありません。
受信者は、復号化されたメッセージとその添付ファイル (存在する場合) を表示します 暗号化解除操作が完了すると、アドインがメッセージの処理を完了したことをユーザーに警告する通知が自動的に表示されます。 OnMessageDecrypt ハンドラーで event.completed メソッドを呼び出し、MessageDecryptEventCompletedOptions オブジェクトを渡します。 MessageDecryptEventCompletedOptions オブジェクトを使用すると、復号化されたコンテンツを受信者に表示するかどうかを指定できます。 詳細については、「 イベント処理を実装する」を参照してください。

完成したアドインを試す

完了した暗号化アドインの動作をすぐに確認するには、Outlook のメッセージの 暗号化と暗号化解除のサンプルを試してください。

イベント ベースのアクティブ化を使用して暗号化解除を実装する

独自の暗号化と暗号化解除プロトコルを実装する必要があります。 アドインは、 OnMessageDecrypt イベントを処理するように構成して、アドインでメッセージの暗号化を解除し、復号化された内容を表示できるタイミングを簡単に判断する必要もあります。 OnMessageDecrypt イベントを実装するには、次の操作を行う必要があります。

  1. アドインのマニフェストを構成します
  2. イベント処理を実装します。

サポートされている環境

OnMessageDecrypt イベントは、メッセージ読み取り画面でサポートされています。 サポートは、次の表に示すように、クライアントと Exchange 環境によって異なります。

クライアント Exchange Online Exchange サブスクリプション エディション (SE) Exchange Server 2019 Exchange Server 2016
Web ブラウザー サポート 使用不可 使用不可 使用不可
Windows (新規) サポート 使用不可 使用不可 使用不可
Windows (クラシック)
バージョン 2602 (ビルド 19725.20126) 以降
サポート 使用不可 使用不可 使用不可
Mac 使用不可 使用不可 使用不可 使用不可
Android 使用不可 使用不可 使用不可 使用不可
iOS 使用不可 使用不可 使用不可 使用不可

マニフェストを構成する

注:

OnMessageDecrypt イベントと"extensions.autoRunEvents.events.options.headerName" プロパティは、統合マニフェストと共にプレビュー段階にあります。 運用アドインで統合マニフェストで暗号化解除機能を使用しないでください。

アドインの manifest.json ファイルで、 "extensions.runtimes" 配列を構成し、 "extensions.autoRunEvents" 配列を追加して、アドインでイベント ベースのアクティブ化を有効にする必要があります。

  1. "extensions.runtimes" 配列に次のオブジェクトを追加します。 このマークアップについて、次の情報にご注意ください。

    • ランタイムの "id" は、わかりやすい名前 "autorun_runtime"に設定されます。
    • "code" プロパティには、HTML ファイルに設定された子"page" プロパティと、JavaScript ファイルに設定された子"script" プロパティがあります。 Office では、プラットフォームに応じてこれらの値のいずれかを使用します。
      • Outlook on the webと新しい Outlook on Windows では、ブラウザー ランタイムでハンドラーが実行され、HTML ファイルが読み込まれます。 そのファイルには、JavaScript ファイルを読み込む <script> タグが含まれています。
      • クラシック Outlook on Windows では、JavaScript 専用ランタイムでイベント ハンドラーが実行され、JavaScript ファイルが直接読み込まれます。 詳細については、「 Office アドインのランタイム」を参照してください。
    • "lifetime" プロパティは "short" に設定されます。つまり、イベントがトリガーされたときにランタイムが起動し、ハンドラーが完了するとシャットダウンします。
    • アクションは 、JavaScript ハンドラーを OnMessageSend イベントと OnMessageDecrypt イベントにマップします。
    "runtimes": [
        {
            "requirements": {
                "capabilities": [
                    {
                        "name": "Mailbox",
                        "minVersion": "1.16"
                    }
                ]
            },
            "id": "autorun_runtime",
            "type": "general",
            "code": {
                "page": "https://localhost:3000/launchevents.html",
                "script": "https://localhost:3000/launchevents.js"
            },
            "lifetime": "short",
            "actions": [
                {
                    "id": "onMessageSendHandler",
                    "type": "executeFunction"
                },
                {
                    "id": "onMessageDecryptHandler",
                    "type": "executeFunction"
                }
            ]
        }
    ],
    
  2. "extensions"配列内の オブジェクトのプロパティとして、次の"autoRunEvents"配列を追加します。 このマークアップについて、次の情報にご注意ください。

    • イベント オブジェクトは、アドインが処理するイベントごとに作成されます。 このサンプルでは、1 つのイベント オブジェクトが OnMessageSend 用に作成され、もう 1 つは OnMessageDecrypt用に作成されます。 両方のイベントは、サポートされているイベント の表で説明されているように、統合マニフェスト イベント名 ("messageSending""messageDecrypt") を使用します。
    • イベントが発生したときに適切なハンドラーが確実に実行されるようにするには、"actionId"で指定された関数名が、前の手順の"runtimes.actions"配列内の該当するオブジェクトの"id" プロパティで使用される名前と一致する必要があります。
    • "options" プロパティは、OnMessageSendイベントとOnMessageDecryptイベントの追加構成を提供します。
      • OnMessageSendの場合、"sendMode" オプションは、ユーザーがアドインの条件を満たしていない場合にメッセージを送信できるかどうかを指定します。 このサンプルでは、 "softBlock" オプションを指定します。 送信モード オプションの詳細については、「スマート アラートを使用して Outlook アドインで OnMessageSend イベントと OnAppointmentSend イベントを処理する」の「使用可能な送信モード オプション」セクションを参照してください。
      • OnMessageDecryptの場合、"headerName" オプションは、メッセージがアドインによって暗号化されたかどうかを識別するために使用されるインターネット ヘッダー名を指定します。 同じヘッダーが、アドインによって暗号化されたメッセージに追加されます。
    "autoRunEvents": [
        {
            "events": [
              {
                  "type": "messageSending",
                  "actionId": "onMessageSendHandler",
                  "options": {
                      "sendMode": "softBlock"
                  }
              },
              {
                  "type": "messageDecrypt",
                  "actionId": "onMessageDecryptHandler",
                  "options": {
                      "headerName": "contoso-encrypted"
                  }
              }
            ]
        }
    ]
    

イベント処理を実装する

OnMessageDecrypt イベント ハンドラーは、復号化操作を実行し、メッセージの復号化された内容を表示するかどうかを決定するために使用されます。

  • OnMessageDecrypt イベントが発生したときにハンドラーを確実に実行するには、ハンドラーが実装されている JavaScript ファイルで Office.actions.associate を呼び出します。 これにより、マニフェスト内の <LaunchEvent> 要素の FunctionName 属性で指定されたハンドラー名が、対応する JavaScript にマップされます。
  • 復号化操作が完了したら、 event.completed を呼び出して、アドインが OnMessageDecrypt イベントの処理を完了したことをクライアントに通知する必要があります。 メッセージとその添付ファイルの復号化された内容を表示するには、 MessageDecryptEventCompletedOptions オブジェクトを event.completed 呼び出しに渡し、 その allowEvent プロパティを true に設定します。 次に、オブジェクトの emailBody プロパティと 添付ファイル プロパティで、メッセージの復号化された内容を指定します。 また、contextData プロパティでアドインが処理するために必要なデータを指定することもできます。 たとえば、カスタム インターネット ヘッダーを格納して、応答と転送のシナリオでメッセージを復号化できます。

注:

従来の Outlook on Windows 用のイベント ベースのアドインを作成する場合は、次の点に注意してください。

  • 現在、イベント ハンドラーを含む JavaScript ファイルではインポートはサポートされていません。
  • イベントを処理するためにマニフェストで指定された JavaScript 関数が実行されると、 Office.onReady()Office.initialize のコードは実行されません。 代わりに、ユーザーの Outlook バージョンの確認など、イベント ハンドラーに必要なスタートアップ ロジックをイベント ハンドラーに追加することをお勧めします。

OnMessageDecrypt イベント ハンドラーの例を次に示します。

function onMessageDecryptHandler(event) {
    // Your code to decrypt the contents of a message would appear here.
    ...

    // Use the results from your decryption process to display the decrypted contents of the message body and attachments.
    const decryptedBodyContent = "<p>Please find attached the recent report and its supporting documentation.</p>";
    const decryptedBody = {
        coercionType: Office.CoercionType.Html,
        content: decryptedBodyContent
    };

    // Decrypted content and properties of a file attachment.
    const decryptedPdfFile = "JVBERi0xLjQKJeLjz9MKNCAwIG9i...";
    const pdfFileName = "Fabrikam_Report_202509";

    // Decrypted properties of a cloud attachment.
    const cloudFilePath = "https://contosostorage.com/reports/weekly_forecast.xlsx";
    const cloudFileName = "weekly_forecast.xlsx";

    // Decrypted content and properties of an inline image.
    const decryptedImageFile = "iVBORw0KGgoAAAANSUhEUgAA...";
    const imageFileName = "banner.png";
    const imageContentId = "image001.png@01DC1DD9.1A4AA300";

    const decryptedAttachments = [
        {
            attachmentType: Office.MailboxEnums.AttachmentType.File,
            content: decryptedPdfFile,
            isInline: false,
            name: pdfFileName
        },
        {
            attachmentType: Office.MailboxEnums.AttachmentType.Cloud,
            isInline: false,
            name: cloudFileName,
            path: cloudFilePath
        },
        {
            attachmentType: Office.MailboxEnums.AttachmentType.File,
            content: decryptedImageFile,
            contentId: imageContentId,
            isInline: true,
            name: imageFileName
        }
    ];

    event.completed({
        allowEvent: true,
        emailBody: decryptedBody,
        attachments: decryptedAttachments,
        contextData: { messageType: "ReplyFromDecryptedMessage" }
    });
}

// IMPORTANT: To ensure your add-in is supported in Outlook, remember to map the event handler name specified in the manifest to its JavaScript counterpart.
Office.actions.associate("onMessageDecryptHandler", onMessageDecryptHandler);

ヒント

画像がインライン添付ファイルとしてメッセージに追加されると、コンテンツ ID が自動的に割り当てられます。 メッセージの本文では、インライン添付ファイルのコンテンツ ID は、次の例のような<img>要素のsrc属性で指定されます。

<img width=96 height=96 id="Picture_1" src="cid:image001.png@01DC1E6F.FC7C7410">

復号化中にこれらのインライン添付ファイルを簡単に識別して提供するには、暗号化中にインライン添付ファイルのコンテンツ ID をメッセージ ヘッダーに保存することをお勧めします。 Office.context.mailbox.item.getAttachmentsAsync を呼び出して、インライン添付ファイルのコンテンツ ID を取得します。 次に、 Office.context.mailbox.item.internetHeaders.setAsync を呼び出して、メッセージのヘッダーに ID を保存します。

Outlook アイテムの添付ファイルの暗号化を解除する (プレビュー)

Outlook アイテムの添付ファイル (Office.MailboxEnums.AttachmentType.Item)、特にメールの添付ファイルの暗号化解除のサポートは、Outlook on the webおよび Windows (新規およびクラシック) でプレビューできます。 従来の Outlook on Windows でこの機能をプレビューするには、バージョン 2606 (ビルド 20114.15110) 以降をインストールする必要があります。 次に、 Microsoft 365 Insider プログラム に参加し、[ ベータ チャネル ] オプションを選択して Office ベータ ビルドにアクセスします。 この記事のサンプル コードを使用してこの機能をテストするには、 onMessageDecryptHandler 関数を次のコードで更新します。

    // Decrypted content and properties of an email attachment.
    const decryptedEmailFile = "VGhpcyBpcyBhIHRleHQgZmlsZS4=...";
    const emailFileName = "Fabrikam_Report_202508.eml";

    const decryptedAttachments = [
        ...
        {
            attachmentType: Office.MailboxEnums.AttachmentType.Item,
            content: decryptedEmailFile,
            name: emailFileName
        }
    ];
    ...

暗号化解除操作のエラー メッセージをカスタマイズする (プレビュー)

失敗した暗号化解除操作のカスタム エラー メッセージは、Outlook on the webおよび Windows (新規およびクラシック) でプレビューできます。 従来の Outlook on Windows でこの機能をプレビューするには、バージョン 2606 (ビルド 20114.15110) 以降をインストールする必要があります。 次に、 Microsoft 365 Insider プログラム に参加し、[ ベータ チャネル ] オプションを選択して Office ベータ ビルドにアクセスします。

暗号化解除操作が失敗した場合、event.completed呼び出しのallowEvent プロパティは false に設定され、Outlook ではユーザーに次の既定の通知が表示されます:"<アドイン名>メッセージの処理に失敗しました。カスタム エラー メッセージを指定するには、アドインのevent.completed呼び出しの errorMessage プロパティを設定します。 カスタム メッセージの前に " <add-in name>:" というプレフィックスが付いています。 カスタム メッセージを表示できない場合は、代わりに既定の通知が表示されます。

次のコード サンプルは、復号化アドインのカスタム エラー メッセージを指定する方法を示しています。

event.completed({
    allowEvent: false,
    errorMessage: "This message couldn't be decrypted. Contact the Contoso IT team for further assistance."
});

暗号化解除されたコンテンツの配布を管理する (プレビュー)

暗号化解除されたコンテンツの未承認の配布を防ぐために、Outlook on the webと Windows (新規およびクラシック) では、アクセス制御オプションをプレビューできます。 従来の Outlook on Windows でこの機能をプレビューするには、バージョン 2606 (ビルド 20114.15110) 以降をインストールする必要があります。 次に、 Microsoft 365 Insider プログラム に参加し、[ ベータ チャネル ] オプションを選択して Office ベータ ビルドにアクセスします。

暗号化解除されたコンテンツの印刷、コピー、保存を制限するには、event.completed呼び出しの accessControls プロパティを含めます。 次に、 allowPrintallowCopyPasteallowSave プロパティを falseに設定します。 accessControls プロパティが指定されていない場合、アクセス制御は既定でtrueされます。

この記事のサンプル コードを使用してこの機能をテストするには、onMessageDecryptHandler関数のevent.completed呼び出しを次のコードで更新します。

    event.completed({
        allowEvent: true,
        emailBody: decryptedBody,
        attachments: decryptedAttachments,
        contextData: { messageType: "ReplyFromDecryptedMessage" },
        accessControls: {
            allowPrint: false,
            allowCopyPaste: false,
            allowSave: false
        }
    });

注:

  • Outlook on the webでは、allowCopyPaste プロパティを false に設定すると、ユーザーはスクリーンショットや記録の形式で画面をキャプチャできなくなります。 ユーザーが Outlook ブラウザー タブを再読み込みするまで、画面キャプチャ ポリシーは有効なままです。
  • Outlook on the webと新しい Outlook on Windows で、allowPrint プロパティを false に設定すると、コンテキスト メニューが無効になります ([コピー]、[すべて選択]、[印刷] などのオプションが表示されます)。 allowCopyPaste プロパティが true に設定されている場合、ユーザーは Ctrl+Cキーを押してもコンテンツをコピーできますが、コンテキスト メニューの [コピー] オプションは使用できません。

動作と制限事項

  • イベント ベースのアドインの動作と制限事項に注意してください。詳細については、「 イベントを使用してアドインをアクティブ化する」を参照してください。

  • 各アドインは独自の暗号化プロトコルを使用するため、メッセージを暗号化したのと同じアドインによってのみ、メッセージの暗号化を解除できます。 メッセージの暗号化を解除するために必要なアドインがユーザーにインストールされていない場合、メッセージが暗号化されていることを通知が通知されます。 暗号化解除プロセスをユーザーにガイドするには、暗号化されたメッセージの本文のプレースホルダー メッセージをカスタマイズします。 プレースホルダー メッセージには、アドインをインストールする方法に関する情報を含めることができます。 暗号化プロセス中にメッセージ本文を設定するには、 Office.context.mailbox.item.body.setAsync を呼び出します。

    暗号化されたメッセージのサンプル プレースホルダー メッセージ。

  • データのセキュリティと機密性を確保するために、復号化されたコンテンツは Outlook クライアントに格納されません。 暗号化されたメッセージの内容は、ユーザーがメッセージを開くたびに復号化されます。

  • 暗号化されたメッセージは、ユーザーが返信または転送する前に、最初に復号化する必要があります。 暗号化解除中に、暗号化されたメッセージに返信したり転送したりすることはできません。

  • 暗号化されたメッセージの暗号化解除中にユーザーが別のメール アイテムに移動すると、暗号化解除プロセスの実行が停止します。 ユーザーは、暗号化解除プロセスをアクティブ化するために、メッセージをもう一度選択または開く必要があります。

  • 暗号化されたメッセージに返信または転送すると、下書きは暗号化されずに 下書き フォルダーに保存されます。

  • event.completed メソッドの attachments プロパティは、Outlook on the web および Windows (新規およびクラシック) でのプレビューを除き、Office.MailboxEnums.AttachmentType.Item型の添付ファイルをサポートしていません。 詳細については、「 Outlook アイテムの添付ファイルの暗号化解除 (プレビュー)」を参照してください。

  • カスタム暗号化アドインは、DRM または S/MIME によって既に保護されているメッセージを暗号化できません。

  • Outlook on the webおよび新しい Outlook on Windows では、暗号化されたメッセージが会話によってグループ化されると、会話スレッドから現在選択されているメッセージのみが復号化されます。 会話スレッド内の他のメッセージは、選択されるまで暗号化されたままになります。

  • Outlook on the webおよび新しい Outlook on Windows では、ユーザーは暗号化解除されたメッセージを EML 形式でのみダウンロードできます。 MSG 形式でダウンロードするオプションは使用できません。

復号化通知

OnMessageDecrypt イベントを処理するアドインは、次の表に示すように、特定の復号化シナリオで通知を自動的に表示します。

Notification シナリオ
<アドイン名> は使用できず、現時点ではメッセージを処理できません。 従来の Outlook on Windows にのみ適用されます。 この通知は、エラーが原因でアドインの読み込みができなかったか、ユーザーのクライアントまたはコンピューターがオフラインであるため、アドインの読み込みに失敗したときに表示されます。
<アドイン名> メッセージの処理に失敗しました。 アドインがメッセージの暗号化を解除しているときにエラーが発生しました。 暗号化解除操作を再試行するには、受信者が別のメッセージに切り替えてから、暗号化されたメッセージをもう一度開いて、 OnMessageDecrypt イベントを呼び出す必要があります。
<アドイン名> アドインがメッセージの暗号化を解除しています。 アドインは、メッセージの暗号化を解除する OnMessageDecrypt イベントを処理しています。
このメッセージは、 <アドイン名> アドインによって暗号化されます。 この通知は、必要な暗号化アドインがインストールされていない受信者に表示されます。 メッセージの暗号化を解除する方法に関するガイダンスを提供するには、暗号化されたメッセージの本文にプレースホルダー メッセージを含めます。 詳細については、「 動作と制限事項」を参照してください。
<アドイン名> アドインによってメッセージの暗号化が解除されました。 アドインによってメッセージの内容の暗号化が正常に解除されました。 ユーザーはメッセージとその添付ファイルを表示できるようになりました。
<アドイン名> メッセージの処理に予想以上に時間がかかります。 アドインは 5 秒以上実行されていますが、5 分未満です。
<アドイン名> タイムアウトしました。再試行するには、別のメールを選択し、このメッセージに戻ります。 アドインは、5 分間実行した後にタイムアウトします。 暗号化解除操作を再試行するには、受信者が別のメッセージに切り替えてから、暗号化されたメッセージをもう一度開いて、 OnMessageDecrypt イベントを呼び出す必要があります。
<アドイン名> タイムアウトしました。(プレビュー) アドインは、5 分間実行した後にタイムアウトします。 この通知には 再試行 アクションが含まれているため、受信者は別のメッセージに切り替えずに復号化操作を再試行できます。 この再試行機能は、Outlook on the webおよび Windows (新規およびクラシック) でプレビューできます。 従来の Outlook on Windows でこの機能をプレビューするには、バージョン 2606 (ビルド 20114.15110) 以降をインストールする必要があります。 次に、 Microsoft 365 Insider プログラム に参加し、[ ベータ チャネル ] オプションを選択して Office ベータ ビルドにアクセスします。
<アドイン名> 組み込みのセキュリティ機能によって保護されているため、このメッセージを処理できません。 アドインは、DRM または S/MIME によって既に保護されているメッセージを処理しようとします。
カスタム エラー メッセージ (プレビュー) アドインがメッセージの暗号化を解除しているときにエラーが発生しました。 暗号化解除操作を再試行するには、受信者が別のメッセージに切り替えてから、暗号化されたメッセージをもう一度開いて、 OnMessageDecrypt イベントを呼び出す必要があります。 復号化操作のエラー メッセージをカスタマイズする方法のガイダンスについては、「復号化操作 のエラー メッセージのカスタマイズ (プレビュー)」を参照してください。

関連項目