PSLブログ

ヨシナシゴトヲツヅリマス

Perl+WWW::CurlでSendGridからメールを送ってみた(1)

さくらのVPSを借りていると、月25000通までSendGridが無料で使えるので、使わない手はない。

vps-news.sakura.ad.jp

先日のJSONデータの生成ではまった後、WWW::Curlではまり、SendGridのテンプレートではまり、やっと送信できるデモができた。

やりたいこと

  1. Perl+WWW::Curlを使ってSendGridのWeb API v3をたたいてメールを送る
  2. テンプレートを使わずに、1通ずつ送るデモ(cc/bccあり)
  3. テンプレートを使って、差込データを伴う複数の宛先を指定して送るデモ

 その前に、Web API v3について

SnedGridのAPIについては、日本の代理店のサイトで日本語化されたドキュメントが揃っているので、一通り読めばよい。ただ、今回Perlで書こうと思っていたら、WebAPI v3ではPerlのライブラリを公開していないという。いきなり試練が。

 curlコマンドで以下のようにするとメールを送ることができる。

curl --request POST \
--url https://api.sendgrid.com/v3/mail/send \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{"personalizations": [{"to": [{"email": "your.email@example.com"}]}],"from": {"email": "example@example.com"},"subject": "Hello, World!","content": [{"type": "text/plain", "value": "Heya!"}]}'

--dataの部分は、以下のような構造になっている。

{
  "personalizations": [
    {
      "to": [
        {
          "name" : "山田 太郎",
          "email": "tarou_yamada@example.com"
        }
      ],
      "subject": "こんにちは!"
    }
  ],
  "from": {
    "name" : "山田 花子",
    "email": "hanako_yamada@example.com"
  },
  "content": [
    {
      "type": "text/plain",
      "value": "送信テストです。送信テストです。送信テストです。送信テストです。"
    }
  ]
}

まず、APIキーを発行する。

  • SendGridのダッシュボードに入り、Settings->API keysに進む。
  • Create API Keyボタンを押す。
  • API Key Nameを指定(なんでもよい)、権限はFull Accessにしておく。
  • 登録完了後、画面にキーが表示される。
    APIキーは、このとき表示されるだけで、その後参照できないので、必ず別の場所に保存する。

ここで作成したAPIキーは、上記のYOUR_API_KEYの部分に指定する。 

前回の記事ではまったJSONデータの生成は、このcurlコマンドで--data部分に指定するデータを作ろうとしていたのである。

blog.psl.ne.jp

curlコマンド全体を生成するプログラムをPHPで作ったorz。

<?php 
$json = array(
	"personalizations" => array(
		array(
			"to" => array(
					array(
						"name" => "山田 太郎",
						"email" => "tarou_yamada@example.com"
					)
			),
			"subject" => "こんにちは!",
		)
	),
	"from" => array(
		"name" => "山田 花子",
		"email" => "hanako_yamada@example.com"
	),
	"content" => array(
		array(
			"type" => "text/plain",
			"value" => "送信テストです。送信テストです。送信テストです。送信テストです。"
		)
	),
);

echo 'curl --request POST --url https://api.sendgrid.com/v3/mail/send --header "Authorization: Bearer YOUR_API_KEY" --header "Content-Type: application/json" --data ' . "'" . json_encode($json, JSON_HEX_QUOT | JSON_HEX_TAG) . "'";

?>

これを実行すると以下のコマンド一式が表示される。これをPuttyに貼り付けて、メールを送ることができた。

curl --request POST --url https://api.sendgrid.com/v3/mail/send --header "Authorization: Bearer YOUR_API_KEY" --header "Content-Type: application/json" --data '{"personalizations":[{"to":[{"name":"\u5c71\u7530\u3000\u592a\u90ce","email":"tarou_yamada@example.com"}],"subject":"\u3053\u3093\u306b\u3061\u306f\uff01"}],"from":{"name":"\u5c71\u7530\u3000\u82b1\u5b50","email":"hanako_yamada@example.com"},"content":[{"type":"text\/plain","value":"\u9001\u4fe1\u30c6\u30b9\u30c8\u3067\u3059\u3002\u9001\u4fe1\u30c6\u30b9\u30c8\u3067\u3059\u3002\u9001\u4fe1\u30c6\u30b9\u30c8\u3067\u3059\u3002\u9001\u4fe1\u30c6\u30b9\u30c8\u3067\u3059\u3002"}]}'

※上記は実際には、本物のAPIキーと差出人アドレス、送信先アドレスが入っている。

次回へ続く。