Challenge Engineer Life !

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

Java標準のHTTP ClientからSendGridを使ってメール送信する

2年ほど前に会社ブログでこんな記事を書きました。

JShellからSendGridでメール送信する | SendGridブログ

このときはSendGridのJavaライブラリを利用していたのですが、「あれ?そういえばJava 11で標準のHttp Clientが入ったって聞いた気がする」と思って試してみました。参考にした情報はこちらです。

OpenJDK 12.0.1のJShellで試しました。

jshell> import java.net.http.*
jshell> import java.net.http.HttpRequest.*
jshell> import java.net.http.HttpResponse.*
jshell> var client = HttpClient.newBuilder().build()
jshell> var req = HttpRequest.newBuilder().uri(URI.create("https://api.sendgrid.com/v3/mail/send")).header("Content-Type","application/json").header("Authorization", "Bearer SG.xxxxxxxxxxxxxxxxxxxxxxxxxxxx").POST(BodyPublishers.ofString("{\"personalizations\":[{\"to\":[{\"email\":\"to@example.com\"}]}],\"from\":{\"email\":\"from@example.com\"},\"subject\":\"hello\",\"content\":[{\"type\":\"text/plain\",\"value\":\"content\"}]}")).build()
jshell> client.send(req, BodyHandlers.ofString())

※APIキーとメアドはマスクしています。

JSONの部分はBodyPublishers.ofFileなどでJSONファイルから読み込むのが楽そうですが、とりあえず文字列で指定しました。Raw Stringの記法が入ったらもうちょっとシンプルになりそう。JDK 13待ちかな?

今までJavaでHTTPリクエストを投げるときはApache HttpClientUnirest for Javaを使ってきたので、JShellだとライブラリ読み込みなどが手間だったのですが、標準を使えばシンプルに実行できます。

SendGridのJavaライブラリはApacheのHttpClientに依存しているのだよなぁ。標準で書いてみようかな…。

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