Azure Automationの中で、Send-MailMessageコマンドを使ってメール送信する際、複数の宛先に送るやり方です。
PowerShellの配列でやってみる
- PowerShellで配列を使う場合以下のような書式になります。
[System.String[]] $MailTo = @("mail@example.com","mail2@example.com")
- こんな感じでAutomationの中でべた書きすればうまくいきます。(MailTo以外の変数宣言は省略してます)
[System.String[]] $MailTo = @("mail@example.com","mail2@example.com")
Send-MailMessage -UseSsl -From $MailFrom -To $MailTo -Subject $Subject -Body $Body -SmtpServer $SmtpServer -Port $Port -Credential $cred
- でも、Automation自体は固定にして、送り先メールアドレスはパラメータで渡してあげたい場合って多くあると思います。
- その場合に、このようなAutomationにして、パラメータを以下のように渡した場合、
- Mailto : @("mail@example.com","mail2@example.com")
Param(
[parameter(Mandatory=$True)]
[System.String[]] $MailTo
)
Send-MailMessage -UseSsl -From $MailFrom -To $MailTo -Subject $Subject -Body $Body -SmtpServer $SmtpServer -Port $Port -Credential $cred
- エラーメッセージを吐いてコケます。Automationが配列として認識できてないようです。
Unable to cast object of type 'System.String' to type 'System.Object[]'.
JSON形式で渡す
- 以下のようにJSON形式で渡すとうまくいきます。
- Mailto : ["mail@example.com","mail2@example.com"]
Param(
[parameter(Mandatory=$True)]
[System.String[]] $MailTo
)
Send-MailMessage -UseSsl -From $MailFrom -To $MailTo -Subject $Subject -Body $Body -SmtpServer $SmtpServer -Port $Port -Credential $cred
- 気を付けないといけないのが、単一のメールアドレスに送る場合もJSONで渡す必要が出てきます。
- MailTo : ["mail@example.com"]