開発時に簡単なテスト用にWindows の SMTPサービス、POP3サービスを使用することがあると思います。POP3サービスに適切にmailbox が構成されていないと、BadMailフォルダにメールが配信されます。

今回はAD上のユーザにメールを送ったときに適切なmailbox に メールが配信されるように POP3サービスにADのユーザ用のメールボックスを一括で作成するスクリプトを紹介します。

1. AD内のユーザ用のメールボックス一括インポート

POP3サービスをインストールすると下記のようなスナップインが追加されます。下図はドメインcrm.local 上に構築したPOP3サービスに dyn.crm.local というメール用のドメインを作成した状態です。

下記スクリプトでは組織単位MailUsers 以下のユーザ名(SAMAccount)がmailuser または testuser で始まるユーザを winpop コマンドで登録します。

たとえば、AD上のユーザmailuser01宛 に、メールアドレスuser01@dyn.crm.local としてメールを送信した場合にメールボックスにメールが配信されるようにメールボックスを一括作成されます。

# インポート対象のルート
$ou = [adsi] "LDAP://crm.local/OU=MailUsers,DC=crm,DC=local"
$ds = New-Object System.DirectoryServices.DirectorySearcher $ou

# 最大5000件   
$ds.SizeLimit = 5000   
$ds.PageSize = 1000   

# インポートユーザのフィルタ条件セット
$filter = "(&(objectClass=user)(|(sAMAccountName=mailuser*)(sAMAccountName=testuser*)))"
$ds.Filter = $filter
$result = $ds.FindAll()

# 登録
$result | %{ $_.Properties["samaccountname"][0] + "@dyn.crm.local" } | %{ winpop add $_ }

2. まとめ

今回の説明は以上です。間違いなどありましたらご指摘ください。