Exchange アカウント間の切り替え時に署名を自動的に更新する

複数の Exchange アカウントを使用するときにメッセージに正しい署名を適用することが、イベント ベースのOnMessageFromChangedアクティブ化機能に イベントと OnAppointmentFromChanged イベントを追加することで簡単になりました。 このイベントは OnMessageFromChanged 、構成中のメッセージの [From ] フィールドのアカウントが変更されたときに発生し、 OnAppointmentFromChanged 構成中の会議の開催者が変更されたときにイベントが発生します。 これらのイベントにより、署名アドインの機能がさらに拡張され、次の機能が可能になります。

  • 各アカウントにカスタム署名を適用する利便性をユーザーに提供します。
  • メールボックス代理人が複数のメールボックスからの送信メッセージと会議出席依頼をより正確かつ効率的に管理できるようにします。
  • ユーザーのメッセージと予定が、organizationのコミュニケーションとマーケティング ポリシーを満たしていることを確認します。

次のセクションでは、[出人] フィールドのメール アカウントが変更されたときにメッセージの署名を自動的に更新するようにイベントを処理OnMessageFromChangedするイベント ベースのアドインを開発する方法について説明します。

注:

イベントと OnAppointmentFromChanged イベントはOnMessageFromChanged、要件セット 1.13 で導入されました。 これらのイベントのクライアント サポートについては、「 サポートされているクライアントとプラットフォーム」を参照してください。

サポートされているクライアントとプラットフォーム

次の表に、 イベントと OnAppointmentFromChanged イベントをサポートOnMessageFromChangedするクライアントとサーバーの組み合わせを示します。 該当するイベントのタブを選択します。

クライアント Exchange Online Exchange 2019 オンプレミス (累積的な更新プログラム 12 以降) Exchange 2016 オンプレミス (累積的な更新プログラム 22 以降)
Web ブラウザー (モダン UI)

新しい Outlook on Windows (プレビュー)
サポート × 該当なし
Windows (クラシック)
バージョン 2304 (ビルド 16327.20248) 以降
サポート サポート サポート
Mac
バージョン 16.77.816.0 以降
サポート × 該当なし
iOS 該当なし 該当なし 該当なし
Android 該当なし 該当なし 該当なし

前提条件

チュートリアルをテストするには、少なくとも 2 つの Exchange アカウントが必要です。

環境を設定する

Office アドイン用 Yeoman ジェネレーターを使用してアドイン プロジェクトを作成する Outlook クイック スタートを完了します。

マニフェストを構成する

  1. manifest.json ファイルを開きます。

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

    • メールボックス要件セットの "minVersion" は、イベントをサポート OnMessageFromChanged する最小バージョンの要件セットであるため、"1.13" として構成されます。 詳細については、「 イベント ベースのアクティブ化のために Outlook アドインを構成する」の「サポートされているイベント」の表を参照してください。

    • ランタイムの "id" は、わかりやすい名前 "autorun_runtime" に設定されます。

    • "code" プロパティには、子 "page" プロパティが HTML ファイルに設定され、子 "script" プロパティが JavaScript ファイルに設定されています。 これらのファイルは、後の手順で作成または編集します。 Office では、プラットフォームに応じてこれらの値のいずれかを使用します。

      • クラシック Outlook on Windows では、JavaScript 専用ランタイムでイベント ハンドラーが実行され、JavaScript ファイルが直接読み込まれます。
      • Outlook on the webと Mac、および新しい Outlook on Windows (プレビュー) では、ブラウザー ランタイムでハンドラーが実行され、HTML ファイルが読み込まれます。 HTML ファイルには、JavaScript ファイルを <script> 読み込むタグが含まれています。

      詳細については、「 Office アドインのランタイム」を参照してください。

    • "lifetime" プロパティは "short" に設定されています。 つまり、イベントが発生するとランタイムが起動し、ハンドラーが完了するとシャットダウンします。

    • イベントと OnNewMessageCompose イベントのハンドラーOnMessageFromChangedを実行する "アクション" があります。 ハンドラーは、後の手順で作成します。

    {
        "requirements": {
            "capabilities": [
                {
                    "name": "Mailbox",
                    "minVersion": "1.13"
                }
            ]
        },
        "id": "autorun_runtime",
        "type": "general",
        "code": {
            "page": "https://localhost:3000/commands.html",
            "script": "https://localhost:3000/launchevent.js"
        },
        "lifetime": "short",
        "actions": [
            {
                "id": "onMessageFromChangedHandler",
                "type": "executeFunction",
                "displayName": "onMessageFromChangedHandler"
            },
            {
                "id": "onNewMessageComposeHandler",
                "type": "executeFunction",
                "displayName": "onNewMessageComposeHandler"
            }
        ]
    }
    
  3. "extensions" 配列内の オブジェクトのプロパティとして "autoRunEvents" 配列を追加します。 "autoRunEvents" 配列には、次のキー プロパティを持つ オブジェクトが含まれています。

    • "events" プロパティは、 イベントと OnNewMessageCompose イベントにハンドラーをOnMessageFromChanged割り当てます。 統合マニフェストで使用されるイベント名については、「イベント ベースのアクティブ化のために Outlook アドインを構成する」の「サポートされているイベント」の表を参照してください。
    • "actionId" で指定する関数名は、先ほど構成した "actions" 配列内の対応するオブジェクトの "id" プロパティと一致する必要があります。
    "autoRunEvents": [
        {
            "requirements": {
                "capabilities": [
                    {
                        "name": "Mailbox",
                        "minVersion": "1.13"
                    }
                ],
                "scopes": [
                    "mail"
                ]
            },
            "events": [
                {
                    "type": "messageFromChanged",
                    "actionId": "onMessageFromChangedHandler"
                },
                {
                    "type": "newMessageComposeCreated",
                    "actionId": "onNewMessageComposeHandler"
                }
            ]
        }
    ]
    

ヒント

イベント ハンドラーを実装する

イベント ハンドラーは、 イベントと OnMessageFromChanged イベントに対して構成するOnNewMessageCompose必要があります。 関数は onNewMessageComposeHandler 、既定の署名がまだ現在のアカウントで構成されていない場合に、新しく作成されたメッセージに署名を追加します。 [From]\(元\) フィールドのアカウントが変更されると、onMessageFromChangedHandler関数はこの新しく選択したアカウントに基づいて署名を更新します。

  1. 同じクイック スタート プロジェクトから ./src ディレクトリに移動し、 launchevent という名前の新しいフォルダーを作成します。

  2. ./src/launchevent フォルダーに、 という名前の新しいファイル launchevent.js作成します。

  3. コード エディターで ./src/launchevent/launchevent.js ファイルを開き、次の JavaScript コードを追加します。

    /*
     * Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
     * See LICENSE in the project root for license information.
     */
    
    // The OnNewMessageCompose event handler that adds a signature to a new message.
    function onNewMessageComposeHandler(event) {
        const item = Office.context.mailbox.item;
    
        // Check if a default Outlook signature is already configured.
        item.isClientSignatureEnabledAsync({ asyncContext: event }, (result) => {
            if (result.status === Office.AsyncResultStatus.Failed) {
                console.log(result.error.message);
                return;
            }
    
            // Add a signature if there's no default Outlook signature configured.
            if (result.value === false) {
                item.body.setSignatureAsync(
                    "<i>This is a sample signature.</i>",
                    { asyncContext: result.asyncContext, coercionType: Office.CoercionType.Html },
                    addSignatureCallback
                );
            }
        });
    }
    
    // The OnMessageFromChanged event handler that updates the signature when the email address in the From field is changed.
    function onMessageFromChangedHandler(event) {
        const item = Office.context.mailbox.item;
        const signatureIcon =
        "iVBORw0KGgoAAAANSUhEUgAAACcAAAAnCAMAAAC7faEHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAzUExURQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKMFRskAAAAQdFJOUwAQIDBAUGBwgI+fr7/P3+8jGoKKAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABT0lEQVQ4T7XT2ZalIAwF0DAJhMH+/6+tJOQqot6X6joPiouNBo3w9/Hd6+hrYnUt6vhLcjEAJevVW0zJxABSlcunhERpjY+UKoNN5+ZgDGu2onNz0OngjP2FM1VdyBW1LtvGeYrBLs7U5I1PTXZt+zifcS3Icw2GcS3vxRY3Vn/iqx31hUyTnV515kdTfbaNhZLI30AceqDiIo4tyKEmJpKdP5M4um+nUwfDWxAXdzqMNKQ14jLdL5ntXzxcRF440mhS6yu882Kxa30RZcUIjTCJg7lscsR4VsMjfX9Q0Vuv/Wd3YosD1J4LuSRtaL7bzXGN1wx2cytUdncDuhA3fu6HPTiCvpQUIjZ3sCcHVbvLtbNTHlysx2w9/s27m9gEb+7CTri6hR1wcTf2gVf3wBRe3CMbcHYvTODkXhnD0+178K/pZ9+n/C1ru/2HAPwAo7YM1X4+tLMAAAAASUVORK5CYII=";
    
        // Get the currently selected From account.
        item.from.getAsync({ asyncContext: event }, (result) => {
            if (result.status === Office.AsyncResultStatus.Failed) {
                console.log(result.error.message);
                return;
            }
    
            // Create a signature based on the currently selected From account.
            const name = result.value.displayName;
            const options = { asyncContext: { event: result.asyncContext, name: name }, isInline: true };
            item.addFileAttachmentFromBase64Async(signatureIcon, "signatureIcon.png", options, (result) => {
                if (result.status === Office.AsyncResultStatus.Failed) {
                    console.log(result.error.message);
                    return;
                }
    
                // Add the created signature to the mail item.
                const signature = "<img src='cid:signatureIcon.png'>" + result.asyncContext.name;
                item.body.setSignatureAsync(
                    signature,
                    { asyncContext: result.asyncContext.event, coercionType: Office.CoercionType.Html },
                    addSignatureCallback
                );
            });
        });
    }
    
    // Callback function to add a signature to the mail item.
    function addSignatureCallback(result) {
        if (result.status === Office.AsyncResultStatus.Failed) {
            console.log(result.error.message);
            return;
        }
    
        console.log("Successfully added signature.");
        result.asyncContext.completed();
    }
    
    // IMPORTANT: To ensure your add-in is supported in the Outlook client on Windows, remember to 
    // map the event handler name specified in the manifest's LaunchEvent element to its JavaScript counterpart.
    if (Office.context.platform === Office.PlatformType.PC || Office.context.platform == null) {
        Office.actions.associate("onNewMessageComposeHandler", onNewMessageComposeHandler);
        Office.actions.associate("onMessageFromChangedHandler", onMessageFromChangedHandler);
    }
    

重要

Windows: 現時点では、イベント ベースのアクティブ化の処理を実装する JavaScript ファイルでは、インポートはサポートされていません。

ヒント

Outlook on Windows で実行されているイベント ベースのアドインでは、 関数と Office.initialize 関数に含まれるコードはOffice.onReady()実行されません。 代わりに、ユーザーの Outlook バージョンの確認など、アドインのスタートアップ ロジックをイベント ハンドラーに追加することをお勧めします。

コマンド HTML ファイルを更新する

  1. ./src/commands フォルダーから、commands.htmlを開きます。

  2. 既存の スクリプト タグの下に次のコードを追加します。

    <script type="text/javascript" src="../launchevent/launchevent.js"></script>
    
  3. 変更内容を保存します。

Webpackの機能設定を更新する

  1. プロジェクトのルート ディレクトリから、 webpack.config.js ファイルを開きます。

  2. オブジェクト内の plugins 配列を config 見つけて、次の新しいオブジェクトを配列の先頭に追加します。

    new CopyWebpackPlugin({
      patterns: [
        {
          from: "./src/launchevent/launchevent.js",
          to: "launchevent.js",
        },
      ],
    }),
    
  3. 変更内容を保存します。

試してみる

  1. プロジェクトのルート ディレクトリで次のコマンドを実行します。 を実行 npm startすると、ローカル Web サーバーが起動し (まだ実行されていない場合)、アドインがサイドロードされます。

    npm run build
    
    npm start
    

    注:

    アドインが自動的にサイドロードされなかった場合は、「 Outlook アドインをサイドロードしてテストする 」の手順に従って、Outlook でアドインを手動でサイドロードします。

  2. 任意の Outlook クライアントで、新しいメッセージを作成します。 既定の Outlook 署名が構成されていない場合は、アドインによって新しく作成されたメッセージに追加されます。

    既定の Outlook 署名がアカウントで構成されていない場合に、新しく構成されたメッセージに追加されたサンプル署名。

  3. 該当する場合は、[ From ] フィールドを有効にします。 有効にする方法のガイダンスについては、「 メール メッセージの送信に使用するアカウントを変更する」の「From ボタンが表示されない理由」セクションを参照してください。

  4. [ 元] を選択し、別の Exchange アカウントを選択します。 または、[その他のEmailアドレスから>] を選択して、Exchange メール アドレスを手動で入力します。 更新された署名がメッセージに追加され、前の署名が置き換えられます。

    [From] フィールドのアカウントが変更されたときに、ロゴが付いた更新された署名のサンプル。

アドインのトラブルシューティング

イベント ベースのアクティブ化アドインのトラブルシューティング方法のガイダンスについては、「 イベント ベースおよびスパムレポート アドインのトラブルシューティング」を参照してください。

ユーザーにデプロイする

他のイベント ベースのアドインと同様に、 イベントと OnAppointmentFromChanged イベントをOnMessageFromChanged使用するアドインは、organizationの管理者によってデプロイする必要があります。 Microsoft 365 管理センターを使用してアドインを展開する方法のガイダンスについては、「イベント ベースのアクティブ化のために Outlook アドインを構成する」の「ユーザーに展開する」セクションを参照してください。

イベントの動作と制限事項

OnMessageFromChangedイベントと OnAppointmentFromChanged イベントはイベント ベースのアクティブ化機能を通じてサポートされるため、このイベントの結果としてアクティブ化されるアドインにも同じ動作と制限が適用されます。 詳細については、「 イベント ベースのアクティブ化の動作と制限事項」を参照してください。

これらの特性に加えて、アドインがこれらのイベントに対してアクティブ化する場合にも、次の側面が適用されます。

  • イベントは OnMessageFromChanged メッセージ作成モードでのみサポートされますが、 OnAppointmentFromChanged イベントは予定作成モードでのみサポートされます。
  • Outlook on Windows では、イベントのみが OnMessageFromChanged サポートされています。
  • イベントと OnAppointmentFromChanged イベントではOnMessageFromChanged、Exchange アカウントのみがサポートされます。 構成中のメッセージでは、[ 出人] フィールドドロップダウン リストから Exchange アカウントが選択されるか、フィールドに手動で入力されます。 構成中の予定では、開催者フィールドのドロップダウン リストから Exchange アカウントが選択されます。 ユーザーが [From or organizer]\(元または開催者\) フィールドで Exchange 以外のアカウントに切り替えた場合、Outlook クライアントは、以前に選択したアカウントによって設定された署名を自動的にクリアします。
  • 代理人と共有メールボックスのシナリオがサポートされています。
  • このイベントは OnAppointmentFromChangedMicrosoft 365 グループ予定表ではサポートされていません。 ユーザーが Exchange アカウントから開催者フィールドの Microsoft 365 グループ予定表アカウントに切り替えた場合、Outlook クライアントは Exchange アカウントによって設定された署名を自動的にクリアします。
  • [開始元または開催者] フィールドで別の Exchange アカウントに切り替えると、以前に選択したアカウントのアドイン (存在する場合) が終了し、または イベントが開始される前にOnMessageFromChangedOnAppointmentFromChanged、新しく選択したアカウントに関連付けられているアドインが読み込まれます。
  • Emailアカウントエイリアスがサポートされています。 現在のアカウントのエイリアスが [From or organizer]\(元またはオーガナイザー\) フィールドで選択されている場合、 OnMessageFromChanged または OnAppointmentFromChanged イベントは、アカウントのアドインを再読み込みせずに発生します。
  • [From]\(開始\) または [開催者] フィールドドロップダウン リストが誤って開かれた場合、または [開始] または [開催者] フィールドに表示されるのと同じアカウントが再選択されると、 OnMessageFromChanged または OnAppointmentFromChanged イベントが発生しますが、アカウントのアドインは終了または再読み込みされません。

関連項目