Challenge Engineer Life !

エンジニア人生を楽しみたい!仕事や趣味で学んだ技術的なことを書いていくブログです。

SendGrid Web API V3をUnirest for Javaでコールする -認証-

SendGrid Web API V3では認証方法が増えて、ベーシック認証やAPIキーを利用することができるみたいです。

API v3 Overview - SendGrid Documentation | SendGrid

f:id:kikutaro777:20150720193244j:plain

先日使ってみたHTTPクライアントライブラリのUnirest for Javaは、元々このAPI叩くために触ってました(^^;
全然利用例を書いていないのにはてブのったりして焦りました…。kikutaro777.hatenablog.com

Basic認証

SendGridで登録したユーザとパスワードをコロンでつなげてBase64で変換します。
例えば、ユーザが「Aladdin」でパスワードが「open sesame」の場合は「Aladdin:open sesame」をBase64で変換します。

今回は次のWebサイト使って変換しました。

www.base64encode.org
f:id:kikutaro777:20150720231241j:plain

ちなみにAladdinとopen sesameはUSのWikipediaのBasic認証の解説ページからでした(^^;
Basic access authentication - Wikipedia, the free encyclopedia

ここまで準備できたら、あとは次のように呼び出すだけ。

HttpResponse<JsonNode> ret = Unirest.get("https://api.sendgrid.com/v3/templates")
                .header("Authorization", "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==")
                .asJson();
System.out.println(ret.getBody());

SendGridではメールのひな形(テンプレート)を作れるのですが、それを取得するものです。
結果はJSONで次のような情報が返ってきます。

{
    "templates": [
        {
            "id": "8832dabe-3515-47ac-a06d-f8852970556a", 
            "name": "kikutaro_template", 
            "versions": [
                {
                    "active": 1, 
                    "id": "37268f35-0ed2-4c55-bf1a-593a677b7f43", 
                    "name": "kikutaro_template Version 1", 
                    "subject": "<%subject%>", 
                    "template_id": "8832dabe-3515-47ac-a06d-f8852970556a", 
                    "updated_at": "2015-07-18 10:23:53"
                }
            ]
        }
    ]
}

今回はテンプレートを全て取得するものでしたが、基本的にREST形式となっていて

  • 全てのテンプレートを取得
  • テンプレートIDを指定して一本引き
  • テンプレートの作成(POST)
  • テンプレートの編集(PATCH)
  • テンプレートの削除(DELETE)

などの操作がAPIからできます。この辺はまた別途使っていきたい。

なお、UnirestではBASIC認証に対応していて、次のように書くこともできます。

HttpResponse<JsonNode> ret = Unirest.get("https://api.sendgrid.com/v3/templates")
                .basicAuth("Aladdin", "open sesame")
                .asJson();
System.out.println(ret.getBody());

APIキーによる認証

APIキーについてはKKEのブログに日本語で詳しく解説されてますので、ここでは解説を飛ばします。

APIキー認証でセキュリティを強化しよう | ブログ | SendGrid

次のように書けます。

HttpResponse<JsonNode> ret = Unirest.get("https://api.sendgrid.com/v3/templates")
                .header("Authorization", "Bearer SG.xxxxxxxxxxxxxxx.yyyyyyyyyyyyyyyyyyyyyyy")
                .asJson();
System.out.println(ret.getBody());

認証ができてしまえば、色々API叩けるので遊べそうです。

SendGrid-Javaライブラリを使ってみた

2年前くらいにSendGridでJava使ってメールを送るサンプル作った時、JavaMailを使うかsendgrid4jを使っていました↓

kikutaro777.hatenablog.com

久々にSendGrid触ってみようと思ったら、ログイン後のダッシュボードとかカッコいい感じに変わってて焦ったり(^^;
この辺は既にまとめられていました。ありがたや。

blog.shibayan.jp

で、いつの間にかSendGrid公式で「sendgrid-java」なるライブラリがでていました。
MavenのCentralみると今年の5月くらいなのかなぁ。

github.com

MavenやGradleで依存性定義すればOKなので、1分くらいでサンプル作れます。

以下はNetBeans&Mavenを使った流れですが、こんな感じ。

Mavenプロジェクト作成

NetBeansの「ファイル」→「新規プロジェクト」から「Maven」の「Javaアプリケーション」を選択
f:id:kikutaro777:20150713233731j:plain

プロジェクト名などを入力して「終了」
f:id:kikutaro777:20150713233642j:plain

pom.xml

依存性としてpom.xmlに以下を追加します。

<dependencies>
    <dependency>
        <groupId>com.sendgrid</groupId>
        <artifactId>sendgrid-java</artifactId>
        <version>2.2.2</version>
    </dependency>
</dependencies>

ビルドしてjarが依存性に入ればOK

コード

とりあえずGitHubにあるサンプルコードをコピペレベルで書いてみます。

package jp.co.kke.sendgridsample;

import com.sendgrid.SendGrid;
import com.sendgrid.SendGridException;

/**
 * sendgrid-javaを利用したメール送信サンプル
 * @author kikuta
 */
public class Main {

    public static void main(String[] args) {
        SendGrid sendgrid = new SendGrid("ここにアカウント", "ここにパスワード");

        SendGrid.Email email = new SendGrid.Email();
        email.addTo("宛先のメールアドレス");
        email.setFrom("送信元のメールアドレス");
        email.setSubject("こんにちは");
        email.setText("このメールはキクタローがSendGridから送ったよ。");

        try {
          SendGrid.Response response = sendgrid.send(email);
          System.out.println(response.getMessage());
        }
        catch (SendGridException e) {
          System.err.println(e);
        }
    }
    
}

実行

ビルドして実行すると、ResponseがJSONで返ってきています。成功すればmessageとしてsuccessが返ります。下図のような感じ。

f:id:kikutaro777:20150713234120j:plain

メール確認

あっさりと届いてる!

f:id:kikutaro777:20150713234319j:plain

このsendgrid-javaライブラリ、色々できそうなので、試していこう~

にほんブログ村 IT技術ブログへ
にほんブログ村 にほんブログ村 IT技術ブログ Javaへ
にほんブログ村