グローバルアドレスリストの同期とアウトルックでの使用方法

グローバルアドレスリストを同期してOutlookで使用する方法

Ana NetoProducts and Solutions Leave a Comment

「宛先」欄に名前を入力し始めたら、Outlookが完璧にオートコンプリートしてくれた経験はありませんか? 企業環境では、この「魔法のような機能」は多くの場合、Exchange Serverのグローバルアドレスリストによって実現されていますが、別々のExchange組織やMicrosoft 365テナントをまたいで作業する必要がある場合、Outlookはもはや「魔法のように」全員を検索することはできなくなります。.

要点

  • グローバルアドレスリスト(GAL) これは、ユーザー、グループ、配布リストなど、メール機能を利用できる受信者の社内ディレクトリとして機能します。通常、個別の Exchange 組織または Microsoft 365 テナントごとに、独自のグローバルアドレスリストが設定されています。.
  • 提携企業や合併する組織が Exchangeの各組織 Microsoft 365 テナントについては、それぞれ独自の 個別のグローバルアドレスリスト. ユーザーには、他の組織のディレクトリに登録されているユーザーが自動的に表示されることはありません。.
  • 一般的な解決策は次のとおりです。 グローバルアドレスリストの同期, これは、別々の環境間でアドレスリストのエントリを相互にコピーする機能であり、これにより、各組織のユーザーが相手組織のユーザーを検索し、連絡を取ることができるようになります。. CB Global Address List Sync, CB Exchange Server Sync用のアドオンであるこのツールは、この処理を自動的に行い、バックグラウンドで静かに動作します。.

2023年6月に初公開、2026年9月に最終更新

グローバルアドレスリスト(GAL)とは何ですか?

グローバルアドレスリスト(GAL)は、Microsoft Exchange の中央組織ディレクトリです。ここには、ユーザーが電子メールの宛先指定や会議のスケジュール設定を行う際に検索・選択できる、メール対応の受信者が登録されています。.

組織の構成に応じて、GALには以下のものが含まれる場合があります:

  • ユーザーのメールボックス
  • メールの連絡先
  • Microsoft 365 グループとメール対応セキュリティ グループ
  • 配布リスト
  • 共有メールボックス
  • 会議室やプロジェクターなどの施設・設備

グローバルアドレスリストはどのように機能するのでしょうか?

GALは、Microsoft Exchange Server または Microsoft 365 で管理されている受信者情報およびディレクトリ情報に基づいて構築されています。.

オンプレミスの Exchange 環境では、この情報の多くは Active Directory に保存され、同ディレクトリを通じて同期されます。Microsoft 365 では、受信者データは Microsoft Entra ID および Exchange Online で管理されます。ハイブリッド環境を構築している組織では、オンプレミスの Active Directory からクラウドへディレクトリデータを同期させることができます。.

誰かがメールを送信したり、会議の招待状を作成したりすると、OutlookはGALを検索して、人物の名前からメールアドレスを特定することができます。.

「キャッシュされた Exchange モード」で Outlook デスクトップを使用しているユーザーの場合、GAL は多くの場合、オフラインアドレス帳 (OAB) を通じて利用可能です。 OABとは、アドレスリストデータのローカルコピーをダウンロードしたもので、Outlookの接続状態が不安定な場合でも、ユーザーがディレクトリを閲覧・検索できるようにするものです。OABはスケジュールに従って更新されるため、最近変更された連絡先の詳細が、ユーザーのデスクトップ上のOutlookクライアントにすぐには反映されない場合があります。.

グローバルアドレスリストの表示場所

Microsoft Outlookで組織のグローバルアドレスリストを確認するには、以下の手順で行えばよい:

  • Microsoft Outlookを起動します。
  • [開く] 新着メール ウィンドウ。.
    Microsoft Outlook のスクリーンショット - 新規メール
  • をクリックしてください 宛先: または、ショートカットキー「Ctrl+Shift+B」を使用してください。.
    Microsoft Outlook のスクリーンショット - 「送信先」
  • Global Address ListまたはDefault Global Address Listのオプションを選択します。
    Microsoft Outlook のスクリーンショット - 既定のグローバルアドレスリスト

ほら! これほど簡単なんです。. 

GALの同期はいつ必要になるのでしょうか?

通常、別々の組織には、たとえ関連していても、それぞれ個別のGALがあります。ある組織のユーザーは、別の組織のディレクトリにある受信者を自動的に確認することはできません。これは、合併や提携、あるいは支店や子会社間で複数のExchange環境が存在する場合など、想像以上に頻繁に発生します。.

複数のGALへのアクセスはサポートされていません。組織間の可視性を確保するために、管理者はディレクトリエントリを同期させることができます。一般的には、各環境でメール対応の連絡先オブジェクトまたは受信者オブジェクトを作成・管理することでこれを行います。.

これが必要になる可能性のあるシナリオをいくつか見てみましょう:

  • M&A(合併・買収 - A 社が B 社と合併する場合、両社のグローバル・アドレス・リストを同期することで、すべての連絡先情報が両方の組織で共通化されるため、エンドユーザーの生活が容易になります。M&AシナリオにおけるExchangeサーバーの課題については、こちらをご覧ください。 ブログ記事.
  • パートナー – パートナーシップを結ぶと、両チーム間のやり取りが自然と増えます。GAL同士を連携させることで、連絡先を周囲に尋ねる必要がなくなり、初日から全員がOutlookで互いの情報を確認できるようになります。.
  • Microsoft Exchangeサーバーを複数台設置 – 同一グループ内で事業を展開する企業は、それぞれ独自のExchange環境に接続することが可能です。これは、例えば子会社がさまざまな国に分散している場合によく見られる状況です。 例えば、企業グループAが世界中に複数の支店を持ち、各支店が独自のITインフラと異なるExchangeサーバーを保有しているとします。その場合、欧州支店の従業員が同じ企業グループAの北米支店に異動することになった際にも、GALの同期が役立ちます。.

CB Exchange Server SyncとGALの同期化

CB Exchange Server Sync これは、Microsoft Exchange Server 向けの同期ツールです。複数の Exchange 環境間で、メール、カレンダー、連絡先、メモ、タスク、フォルダを常に同期させ、バックグラウンドで静かに動作するため、手動で管理する必要はありません。.

また、これらの環境間でグローバルアドレスリストの同期も必要とする組織については、, CB Global Address List Sync その業務のために特別に開発されたアドオンです。.

インストールは驚くほど簡単なので、このソリューションを稼働させる方法を模索するために、延々と時間を費やす必要はありません。ソフトウェア自体がわかりやすいだけでなく、さらに オンラインドキュメント と、私たちの サポートポータル をご利用いただけます。

グローバルアドレスリストの同期を開始する準備はできていますか? お問い合わせはこちら ぜひ私たちにご連絡ください。私たちがそこへご案内いたします!

      public void Execute(IServiceProvider serviceProvider)
    {
        var tracingService = (ITracingService) serviceProvider.GetService(typeof(ITracingService));
        var context = (IPluginExecutionContext) serviceProvider.GetService(typeof(IPluginExecutionContext));
        var serviceFactory = (IOrganizationServiceFactory) serviceProvider.GetService(typeof(IOrganizationServiceFactory));
        var service = serviceFactory.CreateOrganizationService(context.UserId);
        if (!context.InputParameters.Contains("Target") || !(context.InputParameters["Target"] is Entity))
        {
            を返します;
        }

        var entity = (Entity) context.InputParameters["Target"];
        var isLoginEnabled = HasLoginEnabled(entity);
        
        if (isLoginEnabled == false)
        {
            を返します;
        }

        try
        {
            var emailAddress = (string) entity["emailaddress1"];
            var contactsWithSameEmailAddress = GetContactsByEmailAddress(service, entity.Id, emailAddress);
            if (contactsWithSameEmailAddress.Entities.Count > 0)
            {
                var hasLoginEnabled = HasLoginEnabled(contactsWithSameEmailAddress.Entities[0]);
                if (hasLoginEnabled)
                {
                    throw new InvalidPluginExecutionException(OperationStatus.Failed、
                        "ユーザは既に存在します。別のメールアドレスで登録するか、既存のアカウントでログインしてください;)
                }

                var mergeRequest = new MergeRequest
                {
                    SubordinateId = entity.Id、
                    Target = new EntityReference("contact", contactsWithSameEmailAddress.Entities[0].Id)、
                    UpdateContent = GetUpdateContent(entity)
                };
                var _ = (MergeResponse) service.Execute(mergeRequest);
                entity[CustomAttributeName] = true;
                service.Update(entity);
            }
            else
            {
                var domain = emailAddress.Split('@')[1];
                if (_publicDomains.Contains(domain))
                {
                    SendEmailAndDeactivateContact(service, tracingService, entity);
                }
                else
                {
                    var contactsWithSameDomain = GetContactsByDomain(service, entity.Id, domain);
                    if (contactsWithSameDomain.Entities.Count > 0)
                    {
                        entity["parentcustomerid"] = contactsWithSameDomain.Entities[0]["parentcustomerid"];
                        service.Update(entity);
                    }
                    else
                    {
                        SendEmailAndDeactivateContact(service, tracingService, entity);
                    }
                }
            }
        }
        catch (FaultException ex)
        {
            throw new InvalidPluginExecutionException("ContactPostOperationPlugin でエラーが発生しました。", ex);
        }
    }
クローズコード

著者について

アナ・ネト

記入例 アナ・ネトConnecting Softwareのテクニカルアドバイザー。

“「1997年からソフトウェアエンジニアとして働いていますが、最近は執筆や人前で話すことにも情熱を注いでいます。この記事についてご質問やご意見はありますか?皆様からのフィードバックを心よりお待ちしております。ぜひ下のコメント欄にご記入ください!」"

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

For security, use of Google's reCAPTCHA service is required which is subject to the Google Privacy Policy and Terms of Use.