SendGridのAutoConfigure
では本題へ。
Spring BootにはAutoConfigureというものがあってSpringが提供してる機能やその他ライブラリなどを簡単に使えるようになっているとのことです。AutoConfigureについては以下の情報がかなり詳しく、実際アノテーションを追っていきながら読んでみると非常に面白かったです。
qiita.com
上記解説の中にAutoConfigureの一覧がありますが、よくみると…
……
…
おぉ、今日のAdvent CalendarのテーマであるSendGridが!(わざとらしい
GutHubだとここで確認できます。
それにしても、眺めてみると有名なものがたくさん並んでいますね(^^;
couchbase,flyway,mongoなどのDB関連や、freemarker,mustache,thymeleafなどのテンプレートエンジン、hazelcastやkafka,solrなどなど…これらと一緒に並んでいるのをみて、個人的には胸熱です。
Mandrill(MailChimp)などはないですしw
ということで、Spring Bootから簡単にSendGridを利用したメール送信をすることができます。@Beanなどが不要で、application.propertiesかapplication.ymlにAPI Keyを記述するだけで@AutoWiredにてDIされます。
application.properties
spring.sendgrid.apiKey = #SendGridで取得したAPI Keyを指定
または
application.yml
spring:
sendgrid:
apiKey : #SendGridで取得したAPI Keyを指定
依存性にSendGridから提供されているJavaライブラリを追加します。
<dependency>
<groupId>com.sendgrid</groupId>
<artifactId>sendgrid-java</artifactId>
<version>3.1.0</version>
</dependency>
あとは、サンプルと合わせて以下のような感じに。今回はRest APIで「/send」を指定したらメールが飛ぶようなサンプルです。
package com.example;
import com.sendgrid.Content;
import com.sendgrid.Email;
import com.sendgrid.Mail;
import com.sendgrid.Method;
import com.sendgrid.Request;
import com.sendgrid.Response;
import com.sendgrid.SendGrid;
import java.io.IOException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class SendGridController {
@Autowired
private SendGrid sendGrid;
@GetMapping("send")
public Response send() {
Email from = new Email("test@example.com");
String subject = "Hello World from the SendGrid Java Library!";
Email to = new Email("test@example.com");
Content content = new Content("text/plain", "Hello, Email!");
Mail mail = new Mail(from, subject, to, content);
Request request = new Request();
Response ret = null;
try {
request.method = Method.POST;
request.endpoint = "mail/send";
request.body = mail.build();
ret = sendGrid.api(request);
} catch (IOException ex) {
TODO
}
return ret;
}
}
mainはテンプレのまま。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringBootSendGridApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootSendGridApplication.class, args);
}
}
SendGridのアカウントを取得して、API Keyを発行していることを前提に書きましたが、Keyの発行自体は非常に簡単です。
APIキーの管理 - ドキュメント | SendGrid
APIキー認証でセキュリティを強化しよう | SendGridブログ
Spring Bootを使ったサービス開発で「メールサーバ構築めんどくさいなぁ」とか「気軽にメール送れるサービスないかなぁ」と考えている方は是非一度お試し頂きたいなーと思います(^^)
サービスを動かす環境としてCloud Foundryも手軽です!
SendGrid x Spring BootをPivotal Web Services(Cloud Foundry)で試す - BLOG.IK.AM
Pivotal Web ServicesからのSendGrid利用 | SendGridブログ
Happy Sending!