PowerShellからMandrill(メール送信サービス)のREST APIを使ってメール送信

前回.NETからMandrill(REST API)を使ったので、今回はPowerShellからInvoke-RestMethodとHttpclient使って試してみましょう。

Invoke-RestMethodを使う場合

メールの送信内内容を定義したJSONファイルを作成します。

例)mail.json

{
    "key": "xxxxxxxxxxxxxxxxxx",
    "message": {
        "html": "<p>PowerShell サンプルテキスト(HTML)01</p>",
        "text": "PowerShell サンプルテキスト(TEXT)01",
        "subject": "PowerShell サンプル01",
        "from_email": "hoge1@hogehoge.local",
        "from_name": "Example Name",
        "to": [
            {
                "email": "hoge2@hogehogehoge.local",
                "name": "Recipient Name"
            }
        ],
        "headers": {
            "Reply-To": "hoge1@hogehoge.local"
        }
    }
}

※UTF-8で保存

あとは、Invoke-RestMethodを実行するだけです。

Invoke-RestMethod -Uri https://mandrillapp.com/api/1.0/messages/send.json -InFile .mail.json -Method POST 

簡単ですね。

 

Httpclientを使う場合

Httpclientを使ってREST APIをPOSTするだけですが、1行のInvoke-RestMethodより少し長くなります。

Add-Type -AssemblyName System.Net.Http

#メール送信の内容
$subject = "PowerShell サンプル02"
$html = "<p>PowerShell サンプルテキスト(HTML)02</p>"
$text = "PowerShell サンプルテキスト(TEXT)02"

$json = @"
{
    `"key`": `"xxxxxxxxxxxxxxxxxx`",
    `"message`": {
        `"html`": `"$html`",
        `"text`": `"$text`",
        `"subject`": `"$subject`",
        `"from_email`": `"hoge1@hogehoge.local`",
        `"from_name`": `"Example Name`",
        `"to`": [
            {
                `"email`": `"hoge2@hogehogehoge.local`",
                `"name`": `"Recipient Name`"
            }
        ],
        `"headers`": {
            `"Reply-To`": `"hoge1@hogehoge.local`"
        }
    }
}
"@

# REST APIにメール送信内容をPOST 
$content =  New-Object -TypeName System.Net.Http.StringContent($json)
$httpClient = New-Object -TypeName System.Net.Http.Httpclient
$task = $httpClient.PostAsync("https://mandrillapp.com/api/1.0/messages/send.json", $content)

try 
{
    $task.wait()
    echo $task.Result.Content.ReadAsStringAsync().Result
} 
catch [Exception] 
{
    echo $_.Exception
}
finally
{
    $task.Dispose()
}

もうちょっとメール送信の情報を柔軟にするには、C#でクラス作成&JSONのシリアライズとかすると良いのかな。

Mandrillに限らず、メール送信サービスはREST API用意しているところが多いかと思いますので、管理でメールを送る&解析が簡単で良いですね。

Comments are closed.

Post Navigation