別のExchange組織でエクスポートした連絡先をインポートすると配信不能になる問題に対処するマクロ


以前このブログでも記事にしたことがありますが、Exchange 環境でのメールアドレスとしては LegacyExchangeDN という X.500 形式のアドレスが使用されます。
また、グローバル アドレス一覧から連絡先にエントリーを追加すると、Outlook での見かけ上は SMTP アドレスが表示されていますが、Outlook が内部的に使用するメール アドレスは LegacyExchangeDN となっています。
そのため、グローバル アドレス一覧から追加した連絡先エントリーをエクスポートすると、メールアドレスのフィールドには LegacyExchangeDN が記載されるという結果になります。
さらに、LegacyExchangeDN は組織内でのみ有効なメールアドレスであるため、エクスポートした連絡先を別の Exchange 組織でインポートすると、その連絡先を使ってメールを送信しようとしても配信不能通知が返ってきてしまい、送信ができません。
この問題に対応するには、インポート先で別のフィールドに登録されている SMTP アドレスの情報をその連絡先のメールアドレスとして登録しなおす必要があります。
このような処理を自動化するマクロを作ってみました。
マクロは以下の通りです。

' ここをトリプルクリックでマクロ全体を選択できます。

Public Sub ConvertExToSmtp()
    Const PidLidEmail1OriginalDisplayName = "http://schemas.microsoft.com/mapi/id/{00062004-0000-0000-C000-000000000046}/8084001E"
    Dim fldContacts As Folder
    Dim objContact As ContactItem
    Dim strSmtpAddr As String
    Dim strDisplayName As String
    '
    Set fldContacts = Session.GetDefaultFolder(olFolderContacts)
    For Each objContact In fldContacts.Items
        If TypeName(objContact) = "ContactItem" Then
            With objContact
                If .Email1AddressType = "EX" Then
                    strSmtpAddr = .PropertyAccessor.GetProperty(PidLidEmail1OriginalDisplayName)
                    strDisplayName = .Email1DisplayName
                    .Email1AddressType = "SMTP"
                    .Email1Address = strSmtpAddr
                    .Email1DisplayName = strDisplayName
                    .Save
                End If
            End With
        End If
    Next
End Sub

マクロの登録方法やメニューへの追加について

別のExchange組織でエクスポートした連絡先をインポートすると配信不能になる問題に対処するマクロ」への2件のフィードバック

  1. Exchange環境で、転送メールを作成する際元のメールの配信先を
    メッセージに表示させるマクロを作成しようとしたのですが
    X.500形式と言われているアドレス表示になり、対応策を探していたらこの記事に
    たどり着きました。
    上記のプログラムで通常のメールアドレス形式での表示を実行してみたいと思うのですが
    コード中の「Const PidLidEmail1OriginalDisplayName = “http://schemas.microsoft.com/mapi/id/{00062004-0000-0000-C000-000000000046}/8084001E”」は何を表しているのでしょうか。
    Exchange方式からSMTP方式に変換するためのデータベースのアドレス先を表しているように
    想像するのですが、それはどのようにして調べればよいのでしょうか。

    • 非常に紛らわしいのですが、http://schemas… という文字列は URL ではありません。
      Outlook において連絡先の電子メール 1 アドレスの GAL 上の SMTP アドレスを保存しているプロパティの ID になります。
      そのため、schemas.microsoft.com というようなサーバーは実在しませんし、そのようなサーバーにアクセスして何かを取得するというようなこともありません。

コメントを残す

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

WordPress.com ロゴ

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

Google フォト

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

Twitter 画像

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

Facebook の写真

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

%s と連携中