電子メールの転送設定を管理者が自分で設定する

発行日: 2011 年 2 月

組織のユーザー宛に来た電子メールを組織の他のユーザー アカウントや外部の電子メールアドレス宛に転送するニーズは結構あります。たとえば、ユーザーがメールボックスを複数持っていて、メールを読むときはひとつのメールボックスのみに集約したい、もしくは携帯電話から閲覧できる外部のアドレスに転送する、などです。このメールの転送設定が、2011 年 1 月のサービス更新以降、ユーザー管理者側での PowerShell による設定が可能となりました。この記事では、ユーザー管理者がすぐに使えるメールの転送設定スクリプトを紹介します。

PowerShell スクリプトによる自動化を行うには、最新の Microsoft Online Services 移行ツールや PowerShell をインストールしておく必要があります。詳細は以下を参照してください。

メールの代理受信者を設定する

準備ができたら、以下のスクリプトをメモ帳にコピーし、SetAlternateRecipient.ps1 というファイルに保存します。このスクリプトでは、CSV ファイルで指定したユーザーに対して、それぞれの代理受信者を一括で設定することができます。

param(
  [String]$ImportFile = "D:\Targetusers.csv"
)

add-PSSnapIn Microsoft.Exchange.Transporter
$bposlogin = "admin@contoso.com"
$bpospwd = "Password"
$str=ConvertTo-SecureString $bpospwd -AsPlainText -Force

$bposcred = New-Object System.Management.Automation.PSCredential($bposlogin, $str)

Import-Csv $ImportFile | ForEach-Object {
    $result = Set-MSOnlineAlternateRecipient -Identity $_.mailboxname -AlternateRecipient $_.alternate -DeliverToBoth $false -Credential $bposcred
    Write-Host "`r"
}

ここで、以下のコマンド

add-PSSnapIn Microsoft.Exchange.Transporteradd-PSSnapIn Microsoft.Exchange.Transporter

は、Microsoft Online Services 移行ツールによって追加された PowerShell コマンドレットを有効にするためのコマンドです。ちなみに、「移行コマンド シェル」から Microsoft Online Services 専用の PowerShell スクリプトを実行する場合は、このコマンドを実行する必要はありません。

$bposlogin と $bpospwd には、管理者権限をもつアカウントのユーザー名とパスワードで置き換えてください。なお、このテキスト ファイルは管理者アカウント情報を含むため、取り扱いには十分注意ください。

一方、CSV ファイルには、1 行目に「mailboxname,alternate」というヘッダーを付けて、そのあとにユーザー識別子である電子メール アドレスと転送先の電子メール アドレスをコンマ区切りで記述します。これらのアドレスとしては、組織内部の電子メールアドレスのみ指定できます。また、会議室アカウントや配布リスト名を指定することはできません。

mailboxname,alternate
user1@contoso.com,user6@contoso.com
user2@contoso.com,user7@contoso.com
user3@contoso.com,user8@contoso.com
user4@contoso.com,user9@contoso.com
user5@contoso.com,user0@contoso.com
メモ
外部の電子メールアドレスを指定するには、あらかじめ組織の共通連絡先にそのアドレスを登録しておきます。その上で、そのアドレスを Outlook 上で名前解決してプロパティ ダイアログボックスを表示させると、[電子メール アドレス] タブに、代替となる SMTP アドレスが表示されています。たとえば、sasaki@adventureworks.com を共通連絡先に登録した場合、この欄にはたとえば「sasaki{at}adventureworks.com{.contact}@contoso.apac.microsoftonline.com」などと表示されています。このアドレスを alternate 列に指定します。

この CSV ファイルは以下のコマンド

Import-Csv $ImportFile | ForEach-Object

によって読み込まれ、指定したそれぞれのユーザーに対してループを回します。その後、

$result = Set-MSOnlineAlternateRecipient -Identity $_.mailboxname -AlternateRecipient $_.alternate -DeliverToBoth $false -Credential $bposcred

で、mailboxname 列に書かれたアドレスから alternate 列に書かれたアドレスに Set-MSOnlineAlternateRecipient コマンドで転送設定を行います。この設定では、元のメール ボックスにはメールを配信しない設定になっていますが、元のメールボックスにもメールを配信したい場合は、-DeliverToBoth オプションで $true を設定しておきます。結果を$resultに代入していたり、次の行で Write-Host コマンドを使っているのは、実行結果のテキストを整形するためです。

以下のようなコマンド ファイル SetAlternateRecipient.cmd を作成しておくと、入力する CSV を指定して、結果をログファイルに出力することができます。Powershell.exe のパスは Windows フォルダの場所に応じて適切なパスを指定してください。引数には SetAlternateRecipient.ps1、入力する CSV ファイル、および出力するログファイルの適切なパスを指定してください。

"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "-file" "SetAlternateRecipient.ps1" "AlternateRecipient.csv" > "result.txt"

コマンドが正しく実行されると、以下の結果が出力されます。

Successfully set alternate recipient for mailbox user1@contoso.com.
Successfully set alternate recipient for mailbox user2@contoso.com.
Successfully set alternate recipient for mailbox user3@contoso.com.
Successfully set alternate recipient for mailbox user4@contoso.com.
Successfully set alternate recipient for mailbox user5@contoso.com.

メールの代理受信者を解除する

メールの代理受信者を解除したい場合は、Set-MSOnlineAlternateRecipient コマンドの代わりに Clear-MSOnlineAlternateRecipient コマンドを使うだけであとはほぼ同じ仕組みです。

以下のスクリプトをメモ帳にコピーし、ClearAlternateRecipient.ps1 というファイルに保存します。

param(
  [String]$ImportFile = "D:\Targetusers.csv"
)

add-PSSnapIn Microsoft.Exchange.Transporter
$bposlogin = "admin@contoso.com"
$bpospwd = "Password"
$str=ConvertTo-SecureString $bpospwd -AsPlainText -Force

$bposcred = New-Object System.Management.Automation.PSCredential($bposlogin, $str)

Import-Csv $ImportFile | Select-Object mailboxname | ForEach-Object {
    $result = Clear-MSOnlineAlternateRecipient -Identity $_.mailboxname -Credential $bposcred
    Write-Host "`r"
}

CSV ファイルには、mailboxname 列のみで、転送設定を解除したいアドレスを並べます。

mailboxname
user1@contoso.com
user2@contoso.com
user3@contoso.com
user4@contoso.com
user5@contoso.com

コマンドが正しく実行されると、以下の結果が出力されます。

Successfully cleared alternate recipient for mailbox user1@contoso.com.
Successfully cleared alternate recipient for mailbox user2@contoso.com.
Successfully cleared alternate recipient for mailbox user3@contoso.com.
Successfully cleared alternate recipient for mailbox user4@contoso.com.
Successfully cleared alternate recipient for mailbox user5@contoso.com.