正規表現アクティブ化ルールを使用して Outlook アドインを表示する

メッセージの特定のフィールドで一致がある場合にコンテキスト アドインをアクティブ化するように正規表現ルールを指定します。 コンテキスト アドインは、読み取りモードでのみアクティブになります。 ユーザーがアイテムを作成している場合、Outlook はコンテキスト アドインをアクティブ化しません。 また、Outlook がアドインをアクティブ化しないシナリオ (デジタル署名済みアイテムなど) も存在します。 詳細については、「Outlook アドインのアクティブ化ルール」を参照してください。

重要

エンティティベースのコンテキスト Outlook アドインは、2024 年第 2 四半期に廃止される予定です。 この機能を廃止する作業は 5 月に開始され、6 月末まで継続されます。 6 月以降、コンテキスト アドインはメール アイテム内のエンティティを検出してタスクを実行できなくなります。 次の API も廃止されます。

中断の可能性を最小限に抑えるために、エンティティ ベースのコンテキスト アドインが廃止された後も、次の機能がサポートされます。

  • オンライン会議アドインによってアクティブ化される [会議に参加 ] ボタンの代替実装が開発されています。 エンティティベースのコンテキスト アドインのサポートが終了すると、オンライン会議アドインは自動的に別の実装に移行して [ 会議に参加 ] ボタンをアクティブ化します。
  • エンティティ ベースのコンテキスト アドインが廃止された後も、正規表現ルールは引き続きサポートされます。 代替ソリューションとして正規表現ルールを使用するように、コンテキスト アドインを更新することをお勧めします。

詳細については、「 エンティティ ベースのコンテキスト Outlook アドインの廃止」を参照してください。

アドイン XML マニフェストでは、ItemHasRegularExpressionMatch ルールまたは ItemHasKnownEntity ルールの一部として正規表現を指定することができます。 ルールは DetectedEntity 拡張点で指定されます。

注:

コンテキスト Outlook アドインは、アドインで Microsoft 365 用の統合マニフェスト (プレビュー) を使用する場合はサポートされません。

Outlook は、クライアント コンピューター上のブラウザーまたは Webview コントロールで使用される JavaScript インタープリターの規則に基づいて正規表現を評価します。 この記事では、後で簡潔にするために、"ブラウザー" を使用して "ブラウザーまたは webview コントロール" を参照します。 Outlook では、すべての XML プロセッサでもサポートされているものと同じ特殊文字リストをサポートしています。 次の表は、このような特殊文字を示しています。 次の表で説明するように、対応する文字のエスケープ シーケンスを指定することで、正規表現でこれらの文字を使用できます。

文字 説明 使用するエスケープ シーケンス
" 二重引用符 "
& アンパサンド &
' アポストロフィ '
< より小さい &lt;
> より大きい &gt;

ItemHasRegularExpressionMatch ルール

ItemHasRegularExpressionMatchルールは、サポートされているプロパティの特定の値に基づいてアドインのアクティブ化を制御する場合に役立ちます。 ItemHasRegularExpressionMatch ルールには以下の属性があります。

属性名 説明
RegExName アドインのコードで参照できるように、正規表現の名前を指定します。
RegExValue アドインを表示するかどうかを判断するために評価する正規表現を指定します。
PropertyName 正規表現の評価対象となるプロパティの名前を指定します。 有効な値は BodyAsHTMLBodyAsPlaintextSenderSMTPAddressSubject です。

BodyAsHTML を指定した場合、アイテムの本文が HTML の場合にのみ Outlook は正規表現を適用します。 HTML 以外の場合、Outlook はその正規表現に対して一致を返しません。

BodyAsPlaintext を指定すると、Outlook はアイテムの本文に対して正規表現を常に適用します。

大事な:Rule> 要素の Highlight 属性<指定する必要がある場合は、PropertyName 属性を に設定するBodyAsPlaintext必要があります。
IgnoreCase RegExName で指定された正規表現のマッチングで大文字と小文字の違いを無視するかどうかを指定します。
Highlight クライアントが一致するテキストを強調表示にする方法を指定します。 この要素は、ExtensionPoint 要素内の Rule 要素にのみ適用できます。 all または none のいずれかになります。 指定のない場合、既定値は all に設定されます。

大事な:Rule> 要素で Highlight 属性を<指定するには、PropertyName 属性を に設定するBodyAsPlaintext必要があります。

ルールで正規表現を使用する場合のベスト プラクティス

正規表現を使用する場合は、次に特に注意してください。

  • アイテムの本文にルールを ItemHasRegularExpressionMatch 指定した場合、正規表現は本文をさらにフィルター処理し、アイテムの本文全体を返そうとしないでください。 アイテムの本文全体を取得するなどの .* 正規表現を使用すると、常に期待される結果が返されるとは限りません。

  • あるブラウザーで返されたプレーンテキストの本文は、別のブラウザーではわずかに異なることがあります。 BodyAsPlaintextPropertyName 属性として ItemHasRegularExpressionMatch ルールを使用する場合は、アドインのサポート対象であるすべてのブラウザーで正規表現をテストします。

    さまざまなブラウザーがさまざまな方法で選択したアイテムの本文を取得するため、使用している正規表現が、本文の一部として返される可能性がある微妙な違いをサポートしていることを確認する必要があります。 たとえば、アイテムの本文を取得するために、Internet Explorer 9 などのブラウザーでは DOM の innerText プロパティを使用し、Firefox などのその他のブラウザーでは .textContent() メソッドを使用します。 また、さまざまなブラウザーが異なる改行を返す場合があります。改行は、Internet Explorer では \r\n、Firefox および Chrome では \n です。 詳細については、「W3C DOM の互換性 - HTML」(W3C DOM の互換性 - HTML) を参照してください。

  • アイテムの HTML 本文は、従来の Outlook on Windows または Outlook on Mac、モバイル デバイスの場合、Outlook on the web、または新しい Outlook on Windows (プレビュー) とは若干異なります。 正規表現を正確に定義する必要があります。

  • Outlook クライアント、デバイスの種類、または正規表現が適用されているプロパティによっては、アクティブ化ルールとして正規表現を設計するときに注意する必要があるクライアントごとに、他にもベスト プラクティスと制限があります。 詳細については、「 Outlook アドインのアクティブ化と JavaScript API の制限」を参照してください。

次の ItemHasRegularExpressionMatch ルールでは、大文字小文字に関係なく、送信者の SMTP メール アドレスが @contoso と一致した場合にアドインをアクティブにします。

<Rule xsi:type="ItemHasRegularExpressionMatch"
    RegExName="addressMatches"
    RegExValue="@[cC][oO][nN][tT][oO][sS][oO]"
    PropertyName="SenderSMTPAddress"
/>

属性を使用して同じ正規表現を指定する別の方法を次に IgnoreCase 示します。

<Rule xsi:type="ItemHasRegularExpressionMatch"
    RegExName="addressMatches"
    RegExValue="@contoso"
    PropertyName="SenderSMTPAddress"
    IgnoreCase="true"
/>

次の ItemHasRegularExpressionMatch ルールでは、現在のアイテムの本文に株式銘柄コードが含まれている場合にアドインをアクティブにします。

<Rule xsi:type="ItemHasRegularExpressionMatch"
    PropertyName="BodyAsPlaintext"
    RegExName="TickerSymbols"
    RegExValue="\b(NYSE|NASDAQ|AMEX):\s*[A-Za-z]+\b"/>

ItemHasKnownEntity ルール

ItemHasKnownEntity ルールでは、選択したアイテムの件名または本文でのエンティティの存在に基づいてアドインをアクティブにします。 EntityType タイプはサポートされるエンティティを定義します。 ItemHasKnownEntity ルールに正規表現を適用すると、アクティブ化がエンティティの値のサブセット (特定の URL セットまたは、特定の市外局番の電話番号など) に基づく点で、利便性が増します。

注:

マニフェストに指定されている既定のロケールに関係なく、Outlook が抽出できるのは英語のエンティティ文字列だけです。 エンティティ型をサポートするのは MeetingSuggestion メッセージだけです。予定はこれをサポートしていません。 送信済みアイテム フォルダー内のアイテムからエンティティを抽出することも、ルールをItemHasKnownEntity使用して送信済みアイテム フォルダー内のアイテムのアドインをアクティブ化することもできません。

ItemHasKnownEntity ルールでは、以下の表にある属性をサポートしています。 ItemHasKnownEntity ルールで正規表現の指定が任意の場合、エンティティ フィルターとして正規表現を使用するには、RegExFilter 属性と FilterName 属性の両方を指定する必要があります。

属性名 説明
EntityType このルールが true と評価するために見つける必要のあるエンティティの型を指定します。 複数のルールを使用して複数のエンティティの型を指定します。
RegExFilter EntityType で指定されているエンティティのインスタンスをさらにフィルター処理する正規表現を指定します。
FilterName RegExFilter で指定されている正規表現の名前を指定し、それ以降にコードでその正規表現を参照できるようにします。
IgnoreCase RegExFilter で指定された正規表現のマッチングで大文字と小文字の違いを無視するかどうかを指定します。

次の ItemHasKnownEntity ルールでは、現在のアイテムの件名または本文に URL が存在し、URL に文字列 youtube (大文字小文字は区別しない) が含まれている場合、常にアドインをアクティブにします。

<Rule xsi:type="ItemHasKnownEntity"
    EntityType="Url"
    RegExFilter="youtube"
    FilterName="youtube"
    IgnoreCase="true"/>

コードでの正規表現の結果の使用

現在の項目で次のメソッドを使用して、正規表現に一致するものを取得できます。

  • getRegExMatches は、アドインの ItemHasRegularExpressionMatch ルールと ItemHasKnownEntity ルールで指定されているすべての正規表現について、現在のアイテムで一致するものを返します。

  • getRegExMatchesByName は、アドインの ItemHasRegularExpressionMatch ルールで指定されている特定された正規表現について、現在のアイテムで一致するものを返します。

  • getFilteredEntitiesByName は、アドインの ItemHasKnownEntity ルールで指定されている正規表現について、一致するものを含むエンティティのインスタンス全体を返します。

正規表現が評価されると、配列オブジェクトに入れてアドインに一致が返されます。 getRegExMatches については、そのオブジェクトに正規表現の名前の識別子があります。

注:

Outlook は、配列内の特定の順序で一致を返しません。 また、同じメールボックス内の同じアイテムに対してこれらの各クライアントで同じアドインを実行した場合でも、この配列で一致が同じ順序で返されるとは想定しないでください。

という名前videoURLの正規表現を持つルールを含むItemHasRegularExpressionMatchルール コレクションの例を次に示します。

<Rule xsi:type="RuleCollection" Mode="And">
    <Rule xsi:type="ItemIs" ItemType="Message"/>
    <Rule xsi:type="ItemHasRegularExpressionMatch" RegExName="videoURL" RegExValue="http://www\.youtube\.com/watch\?v=[a-zA-Z0-9_-]{11}" PropertyName="BodyAsPlaintext"/>
</Rule>

次の例では、現在のアイテムの getRegExMatches を使用して、変数 videos を前の ItemHasRegularExpressionMatch ルールの結果に設定します。

const videos = Office.context.mailbox.item.getRegExMatches().videoURL;

このオブジェクトには、複数の一致が配列要素として格納されます。 次のコード例は、 という名前 reg1 の正規表現の一致を反復処理して、HTML として表示する文字列を構築する方法を示しています。

function initDialer()
{
    let myEntities;
    let myString;
    let myCell;
    myEntities = Office.context.mailbox.item.getRegExMatches();

    myString = "";
    myCell = document.getElementById('dialerholder');
    // Loop over the myEntities collection.
    for (let i in myEntities.reg1) {
        myString += "<p><a href='callto:tel:" + myEntities.reg1[i] + "'>" + myEntities.reg1[i] + "</a></p>";
    }

    myCell.innerHTML = myString;
}

MeetingSuggestion エンティティと CampSuggestion という正規表現を指定する ItemHasKnownEntity ルールの例を次に示します。 現在選択されているアイテムに会議の提案が含まれ、件名または本文に WonderCamp という用語があると判明した場合、Outlook はこのアドインをアクティブにします。

<Rule xsi:type="ItemHasKnownEntity"
    EntityType="MeetingSuggestion"
    RegExFilter="WonderCamp"
    FilterName="CampSuggestion"
    IgnoreCase="false"/>

次のコード例では、現在のアイテムの getFilteredEntitiesByName を使用して変数 suggestions を設定し、前の ItemHasKnownEntity ルールで検出された会議の提案の配列を取得します。

const suggestions = Office.context.mailbox.item.getFilteredEntitiesByName("CampSuggestion");

関連項目