0
0

More than 1 year has passed since last update.

[リサーチ・メモ]ClientBuilderでSendGrid実装

Posted at

背景

仕事で使用する予定だった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. メール本文を作成し送信する
今回は事前に作成したテンプレートに文字を埋め込み送信する
ドキュメント
テンプレート.png

	@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));
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0