背景
仕事で使用する予定だったSendGridを、事前の自己学習では、pomに依存関係を追加する方法で利用していた。
しかし、実際はClientBuilderで実装することとなり、触ったことが無かった為、備忘録として纏める。
自己学習での方法
1. 下記をpomに記載し依存関係を追加
<dependency>
<groupId>com.sendgrid</groupId>
<artifactId>sendgrid-java</artifactId>
<version>4.7.0</version>
</dependency>
2. ライブラリをインポートする
import com.sendgrid.Method;
import com.sendgrid.Request;
import com.sendgrid.Response;
import com.sendgrid.SendGrid;
3. メール本文を作成し送信する
今回は事前に作成したテンプレートに文字を埋め込み送信する
※ドキュメント
@Override
public void sendEmail(InquiryInfo InquiryInfo) throws IOException {
try {
SendGrid sg = new SendGrid(dotenv.get("作成したAPIKEY"));
Request request = new Request();
request.setMethod(Method.POST);
request.setEndpoint("mail/send");
request.setBody("{\"personalizations\":[{\"to\":[{\"email\":\"sendEmail\"}],"
+ "\"dynamic_template_data\":{\"name\": \"sendName\", \"content\":\"sendContent\"},"
+ "\"from\":{\"email\":\"test@test.com\"},"
+ "\"template_id\": \"作成したテンプレートID\"}");
String replaceBody = request.getBody().replace("sendEmail", InquiryInfo.getEmail())
.replace("sendName", InquiryInfo.getLastName() + InquiryInfo.getFirstName())
.replace("sendContent", InquiryInfo.getContent());
request.setBody(replaceBody);
System.out.println(request.getBody());
Response response = sg.api(request);
System.out.println(response.getStatusCode());
System.out.println(response.getBody());
} catch (IOException ex) {
System.out.println(ex);
throw ex;
}
}
ClientBuilderを用いた方法
1. 下記をpomに記載し依存関係を追加
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.1</version>
</dependency>
2. ライブラリをインポートする
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.Invocation.Builder;
import java.net.URI;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
3. 変数を宣言する
private Builder builder;
4. インスタンスを生成し、リクエストの準備を行う
builder = ClientBuilder.newBuilder().build()
.target(new URI("エンドポイント")).path("/v3/mail/send")
.request(MediaType.APPLICATION_JSON_TYPE).header("Authorization", "Bearer " + "作成したAPIKEY");
ソース | 詳細 |
---|---|
「ClientBuilder.newBuilder().build()」 | Clientオブジェクトを生成 |
「.target(new URI("エンドポイント"))」 | リクエストのターゲットとなるAPIエンドポイントのURIを指定 |
「.path("/v3/mail/send")」 | ターゲットURIにパスを追加 |
「.request(MediaType.APPLICATION_JSON_TYPE)」 | リクエストのメディアタイプをjsonとして指定 |
「.header("Authorization", "Bearer " + "作成したAPIKEY")」 | リクエストヘッダーを指定 |
5.メール本文を作成し送信する
String sendMailParameter = {\"personalizations\":[{\"to\":[{\"email\":\"test@test.com\"}],"
+ "\"dynamic_template_data\":{\"name\": \"氏名\", \"content\":\"内容\"},"
+ "\"from\":{\"email\":\"test@test.com\"},"
+ "\"template_id\": \"作成したテンプレートID\"}"
Response response = builder.post(Entity.json(sendMailParameter));