blastengineのJava SDKを使ってメール送信を行う

blastengine（ブラストエンジン）はシンプルに使える開発者向けメールサービスを提供しています。何かと面倒なメール配信をシンプルに、かつ確実に送信先に届くようになります。

現在、Java向けに、blastengine SDKを開発しています。この記事では、その使い方を解説します。まずはテキストメールの即時送信についてです。

[blastengineMania/blastengine-java: Java SDK for blastengine](https://github.com/blastengineMania/blastengine-java)

## ユーザ登録する

blastengineにユーザ登録します。管理画面に入るためのユーザID、パスワードが手に入るので、ログインします（ユーザIDは後で使います）。

![getting-started-4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/515541ad-b74e-e1e2-ac34-46d181ee2924.jpeg)

## 送信元ドメインのSPFを設定する

送信元として利用するドメイン（自分で持っているもの）の設定をします。これは任意のドメイン管理サービスで設定できますが、TXTレコードに以下のSPFを追加します。

```
txt @ v=spf1 include:spf.besender.jp ~all
```

## APIキーを取得する

ログイン後、管理画面の右上にある設定メニューに移動します。

![getting-started-6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/47b2b2ac-2e41-77fe-d84f-0ae0b7541f36.jpeg)


そして設定の中で、APIキーを取得します。

![getting-started-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/2b5ca124-3020-1d39-84e4-911cd4db27e2.png)

## 必要な情報について

SDKを使う上で必要なのは、先ほどのAPIキーとユーザIDになります。

## SDKのインストール

SDKはGitHubのリポジトリにある[blastengine.jar](https://github.com/blastengineMania/blastengine-java/blob/main/blastengine.jar)を利用します。これをJavaプロジェクトの中（たとえば `app/libs` ）に入れます。 `app/libs` は最初はないと思うので、フォルダを作成してください。

## SDKのインポート

SDKのインポートについて記述します。たとえばGroovyベースのbuild.gradleの場合は次のようになります。

```groovy
dependencies {
		// 略
    implementation(fileTree(dir: 'libs', include: ['blastengine.jar']))
}
```

これでインストール完了です。このjarファイルはGradle Shadow Pluginを使って依存ライブラリも含めて固めています。もし不要な場合には `gradle build` でjarファイルを生成してください。利用ライブラリは次の通りです。

- org.apache.commons:commons-math3:3.6.1
- com.fasterxml.jackson.core:jackson-databind:2.13.1
- org.apache.httpcomponents:httpcore:4.4.15
- org.apache.httpcomponents:httpclient:4.5.13
- commons-codec:commons-codec:1.10
- com.sun.mail:javax.mail:1.6.2
- org.wso2.apache.httpcomponents:httpmime:4.3.1.wso2v1

## インポート

Java SDKを利用するコードでSDKをインポートします。

```java
import jp.blastengine.BEClient;
import jp.blastengine.BETransaction;
import jp.blastengine.BEMailAddress;
import jp.blastengine.BEError;
```

## 初期化

先ほどのAPIキーとユーザIDを使って初期化します。

```java
BEClient.initialize("YOUR_USER_NAME", "YOUR_API_KEY");
```

## トランザクションオブジェクトの作成

メールを即時配信する際にはトランザクションオブジェクトを使います。

```java
BETransaction transaction = new BETransaction();
```

## 必要な情報をセットする

続けて、トランザクションオブジェクトに必要なオブジェクトをセットします。

```java
transaction.subject ="Test mail from blastengine";
transaction.text = "Mail body";
transaction.html = "<h1>Hello, from blastengine</h1>";
BEMailAddress fromAddress = new BEMailAddress("info@example.com", "Admin");
transaction.setFrom(fromAddress);
transaction.addTo("user@example.jp");
// オプション（CC、BCCも使えます）
transaction.addCc("cc@example.jp");
transaction.addBcc("bcc@example.jp");
```

後は `send` メソッドで送信できます。

```java
try {
	Integer deliveryId = transaction.send();
} catch (BEError e) {
	System.out.println(e.getMessage());
}
```

レスポンスはdeliveryId（配信ID）になります。

```java
System.out.println(deliveryId);
// => 18
```

## コードについて

コードはGitHubにアップしてあります。ライセンスはMIT Licenseになります。

[blastengineMania/blastengine-java: Java SDK for blastengine](https://github.com/blastengineMania/blastengine-java)

## まとめ

blastengineには他にも一括メール配信を行ったり、添付ファイル付きのメール配信機能などもあります。これらの機能も随時実装していきますので、ぜひ皆さんのシステム開発に役立ててください。

[エンジニア向けメール配信システム「ブラストエンジン」](https://blastengine.jp/)