Exchange の受信者とインターネットの受信者に同時に送れない理由


Office 2000 までの「企業/ワークグループ モード」では、一つのプロファイルに Exchange Server とインターネット電子メールを設定している場合、Exchange Server の受信者に対しては Exchange Server、インターネットの受信者に対しては外部の SMTP サーバーというように、一つのメッセージを複数のトランスポート プロバイダ (メッセージの送受信をつかさどるコンポーネント) で同時に送信することができました。このような動作は MAPI 本来の送信処理の仕様によって実現していました。

MAPI ではメッセージの受信者は受信者オブジェクトというものに格納されてメッセージに保存されています。受信者オブジェクトは受信者のアドレス情報や表示名などを受信者ごとに保持しており、その中にアドレス種別というものもあります。そして、メッセージの送信の際にはアドレス種別ごとに適切なトランスポート プロバイダで処理が行われ、それぞれのあて先に送信されます。また、送信が終わった受信者の受信者オブジェクトには送信済みのフラグが設定されるため、他のプロバイダで送信されるということがありません。

Exchange Server の受信者を ExUser、インターネットの受信者を SmtpUser として具体的に説明しましょう。Outlook 2000 でこれらのユーザーをあて先に指定して名前解決をすると、それぞれのアドレスがアドレス帳などから取得されます。このとき、ExUser のアドレス種別は EX となり、アドレスは /o=org/ou=admgr/cn=recipients/cn=ExUser のようになります。また、SmtpUser のアドレス種別は SMTP となり、アドレスは smtpuser@example.com のようになります。この状態で、[受信者アドレスを処理するインフォメーション サービスの順番] に [インターネット電子メール]、[Microsoft Exchange Transport ] という順序で設定が行なわれている場合の処理の流れは以下のようになります。

  1. Outlook 2000 は送信するメッセージを [インターネット電子メール] のトランスポート プロバイダに渡します。このとき、メッセージの受信者オブジェクトは以下のような状態になっています。
    表示名 アドレス種別 アドレス 送信済みフラグ
    ExUser EX /o=org/ou=admgr/cn=recipients/cn=ExUser false
    SmtpUser SMTP smtpuser@example.com false
  2. [インターネット電子メール] のトランスポート プロバイダは SMTP のアドレス種別のみが処理可能であるため、SmtpUser に対してのみメッセージを送信し、SmtpUser の送信済みフラグを設定します。その結果、メッセージの受信者オブジェクトは以下のような状態になります。
    表示名 アドレス種別 アドレス 送信済みフラグ
    ExUser EX /o=org/ou=admgr/cn=recipients/cn=ExUser false
    SmtpUser SMTP smtpuser@example.com true
  3. Outlook 2000 は上記の受信者オブジェクトを含むメッセージを [Microsoft Exchange Transport] のトランスポート プロバイダに渡します。
  4. [Microsoft Exchange Transport] のトランスポート プロバイダは EX と SMTP の両方のアドレス種別が処理可能ですが、SmtpUser はすでに送信済みフラグが設定されているため、設定されていない ExUser に対してのみメッセージを送信し、ExUser の送信済みフラグを設定します。その結果、メッセージの受信者オブジェクトは以下のような状態になります。
    表示名 アドレス種別 アドレス 送信済みフラグ
    ExUser EX /o=org/ou=admgr/cn=recipients/cn=ExUser true
    SmtpUser SMTP smtpuser@example.com true
  5. Outlook はすべての受信者が送信済みとなったため、送信処理を終えます。なお、すべてのトランスポート プロバイダで処理が完了しても送信済みフラグが設定されていない受信者オブジェクトがあった場合、その受信者に送信ができなかったことを示す配信不能通知が生成されます。

一見するとすばらしい動作ですが、実はこの動作には問題があります。それは、送信可能かどうかをアドレス種別でしか判断していないということです。(メールアドレスのドメインによって判断していると誤解されている方もいるかもしれませんが、そこまで Outlook は高度ではないのです。)
上記の例では [Microsoft Exchange Transport] よりも [インターネット電子メール] の優先順位が高かったため、SMTP のアドレスはインターネット電子メールを使用して送信されましたが、順序が逆だった場合はすべて Exchange Server 経由で送信されることになります。また、一つのプロファイルに複数のインターネット電子メールのサービスが含まれていた場合、どのサービスの SMTP サーバーを使うかということを送信の際に決定することはできません。それ以外にも想定していない動作をする可能性があり、実は Outlook 2000 までは一つの MAPI プロファイルで Exchange サービスとインターネット電子メール サービスを混在させるというのはサポートされていない使用方法だったのです。(詳細については http://support.microsoft.com/kb/245446/ja をご覧ください。)

しかし、インターネットが普及し、Exchange とインターネット電子メールの両方を使いたいという要求が多くなったためか、Outlook 2002 以降ではアカウントにより送信元を選択するという方法で両社の共存が実現できるようになりました。

アカウントという概念は、Outlook 98/2000 の [インターネット メールのみ] というモードに存在したもので、このモードでは ISP の SMTP サーバーと POP/IMAP サーバーをアカウントという単位で設定し、メッセージの送信の際にアカウントによって送信元を指定するようになっていました。これによって、ISP A と ISP B という二つのプロバイダを登録していても、それぞれのアドレスを使って送信が可能になります。

Outlook 2002 以降では Exchange Server もアカウントの一つとして位置づけ、Exchange Server と複数のインターネット電子メール サービスが一つの MAPI プロファイルに混在した場合でも、送信時にアカウントを設定したり、返信の際のアカウントとして自動的に受信時のアカウントが設定されるようになりました。

一方、MAPI 本来の送信動作ではなく Outlook 固有の送信動作となったため、前述のような Exchange 受信者とインターネット受信者を同時に設定して別々のサービスから送信というような動作ができなくなりました。これについては利便性が失われたと感じる方も数多くいると思いますが、SMTP がメッセージ プロトコルの標準となってしまった以上、このような動作変更は避けられないと思われます。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中