メール通信をセキュリティで保護するために、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 イベントを実装するには、次の操作を行う必要があります。
サポートされている環境
OnMessageDecrypt イベントは、メッセージ読み取り画面でサポートされています。 サポートは、次の表に示すように、クライアントと Exchange 環境によって異なります。
| クライアント | Exchange Online | Exchange サブスクリプション エディション (SE) | Exchange Server 2019 | Exchange Server 2016 |
|---|---|---|---|---|
| Web ブラウザー | サポート | 使用不可 | 使用不可 | 使用不可 |
| Windows (新規) | サポート | 使用不可 | 使用不可 | 使用不可 |
|
Windows (クラシック) バージョン 2602 (ビルド 19725.20126) 以降 |
サポート | 使用不可 | 使用不可 | 使用不可 |
| Mac | 使用不可 | 使用不可 | 使用不可 | 使用不可 |
| Android | 使用不可 | 使用不可 | 使用不可 | 使用不可 |
| iOS | 使用不可 | 使用不可 | 使用不可 | 使用不可 |
マニフェストを構成する
注:
OnMessageDecrypt イベントは現在、アドインのみのマニフェストでのみ実装できます。
OnMessageDecrypt イベントでアドインをアクティブにするには、アドインの manifest.xml ファイルの<VersionOverridesV1_1> ノードを次のように構成する必要があります。
Outlook on the webおよび新しい Outlook on Windows でイベント ベースのアドインを実行するには、<Runtime> 要素の
resid属性にイベント処理コードを含む HTML ファイルを指定する必要があります。 従来の Outlook on Windows で実行するには、<Runtime>要素の <Override> 子要素にイベント ハンドラーを含む JavaScript ファイルも指定する必要があります。ヒント
ランタイムの詳細については、「 Office アドインのランタイム」を参照してください。
<LaunchEvent> 要素の
Type属性にOnMessageDecryptイベントを指定します。 イベント ハンドラーの関数名を、 要素のFunctionName属性に割り当てる必要があります。 メッセージがアドインによって暗号化されているかどうかを確認するには、HeaderName属性にヘッダー キーを指定する必要があります。 同じヘッダーが、アドインによって暗号化されたメッセージに追加されます。
次に、OnMessageDecrypt イベントを実装する<VersionOverrides> ノードの例を示します。
<VersionOverrides xmlns="http://schemas.microsoft.com/office/mailappversionoverrides" xsi:type="VersionOverridesV1_0">
<VersionOverrides xmlns="http://schemas.microsoft.com/office/mailappversionoverrides/1.1" xsi:type="VersionOverridesV1_1">
<Requirements>
<bt:Sets DefaultMinVersion="1.15">
<bt:Set Name="Mailbox"/>
</bt:Sets>
</Requirements>
<Hosts>
<Host xsi:type="MailHost">
<Runtimes>
<!-- References the HTML file that links to the event handler. This is used by Outlook on the web and the new Outlook on Windows. -->
<Runtime resid="WebViewRuntime.Url">
<!-- References the JavaScript file that contains the event handler. This is used by classic Outlook on Windows. -->
<Override type="javascript" resid="JSRuntime.Url"/>
</Runtime>
</Runtimes>
<DesktopFormFactor>
<FunctionFile resid="WebViewRuntime.Url"/>
<!-- Implements event-based activation. -->
<ExtensionPoint xsi:type="LaunchEvent">
<LaunchEvents>
<LaunchEvent Type="OnMessageSend" FunctionName="onMessageSendHandler" SendMode="SoftBlock"/>
<LaunchEvent Type="OnMessageDecrypt" FunctionName="onMessageDecryptHandler" HeaderName="contoso-encrypted"/>
</LaunchEvents>
<!-- Identifies the runtime to be used (also referenced by the Runtime element). -->
<SourceLocation resid="WebViewRuntime.Url"/>
</ExtensionPoint>
</DesktopFormFactor>
</Host>
</Hosts>
<Resources>
...
<bt:Urls>
<bt:Url id="WebViewRuntime.Url" DefaultValue="https://www.contoso.com/launchevent.html"/>
<bt:Url id="JSRuntime.Url" DefaultValue="https://www.contoso.com/launchevent.js"/>
</bt:Urls>
...
</Resources>
</VersionOverrides>
</VersionOverrides>
イベント処理を実装する
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 を保存します。
動作と制限事項
イベント ベースのアドインの動作と制限事項に注意してください。詳細については、「 イベントを使用してアドインをアクティブ化する」を参照してください。
各アドインは独自の暗号化プロトコルを使用するため、メッセージを暗号化したのと同じアドインによってのみ、メッセージの暗号化を解除できます。 メッセージの暗号化を解除するために必要なアドインがユーザーにインストールされていない場合、メッセージが暗号化されていることを通知が通知されます。 暗号化解除プロセスをユーザーにガイドするには、暗号化されたメッセージの本文のプレースホルダー メッセージをカスタマイズします。 プレースホルダー メッセージには、アドインをインストールする方法に関する情報を含めることができます。 暗号化プロセス中にメッセージ本文を設定するには、 Office.context.mailbox.item.body.setAsync を呼び出します。
データのセキュリティと機密性を確保するために、復号化されたコンテンツは Outlook クライアントに格納されません。 暗号化されたメッセージの内容は、ユーザーがメッセージを開くたびに復号化されます。
暗号化されたメッセージは、ユーザーが返信または転送する前に、最初に復号化する必要があります。 暗号化解除中に、暗号化されたメッセージに返信したり転送したりすることはできません。
暗号化されたメッセージの暗号化解除中にユーザーが別のメール アイテムに移動すると、暗号化解除プロセスの実行が停止します。 ユーザーは、暗号化解除プロセスをアクティブ化するために、メッセージをもう一度選択または開く必要があります。
暗号化されたメッセージに返信または転送すると、下書きは暗号化されずに 下書き フォルダーに保存されます。
event.completedメソッドのattachmentsプロパティでは、現在、Office.MailboxEnums.AttachmentType.Item型の添付ファイルはサポートされていません。
復号化通知
OnMessageDecrypt イベントを処理するアドインは、次の表に示すように、特定の復号化シナリオで通知を自動的に表示します。
| Notification | シナリオ |
|---|---|
| <アドイン名> は使用できず、現時点ではメッセージを処理できません。 | 従来の Outlook on Windows にのみ適用されます。 この通知は、エラーが原因でアドインの読み込みができなかったか、ユーザーのクライアントまたはコンピューターがオフラインであるため、アドインの読み込みに失敗したときに表示されます。 |
| <アドイン名> メッセージの処理に失敗しました。 | アドインがメッセージの暗号化を解除しているときにエラーが発生しました。 暗号化解除操作を再試行するには、受信者が別のメッセージに切り替えてから、暗号化されたメッセージをもう一度開いて、 OnMessageDecrypt イベントを呼び出す必要があります。 |
| <アドイン名> アドインがメッセージの暗号化を解除しています。 | アドインは、メッセージの暗号化を解除する OnMessageDecrypt イベントを処理しています。 |
| このメッセージは、 <アドイン名> アドインによって暗号化されます。 | この通知は、必要な暗号化アドインがインストールされていない受信者に表示されます。 メッセージの暗号化を解除する方法に関するガイダンスを提供するには、暗号化されたメッセージの本文にプレースホルダー メッセージを含めます。 詳細については、「 動作と制限事項」を参照してください。 |
| <アドイン名> アドインによってメッセージの暗号化が解除されました。 | アドインによってメッセージの内容の暗号化が正常に解除されました。 ユーザーはメッセージとその添付ファイルを表示できるようになりました。 |
| <アドイン名> メッセージの処理に予想以上に時間がかかります。 | アドインは 5 秒以上実行されていますが、5 分未満です。 |
| <アドイン名> タイムアウトしました。再試行するには、別のメールを選択し、このメッセージに戻ります。 | アドインは、5 分間実行した後にタイムアウトします。 暗号化解除操作を再試行するには、受信者が別のメッセージに切り替えてから、暗号化されたメッセージをもう一度開いて、 OnMessageDecrypt イベントを呼び出す必要があります。 |
関連項目
Office Add-ins