別の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

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

広告

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中