blastengineのGoogle Apps Script SDKでメールのログを取得する

blastengineは開発者にとって使いやすいメール配信サービスを提供しています。まだサービスローンチしたばかりでSDKが不足しているのですが、徐々に開発を進めています。

Googleスプレッドシートなどで使えるGoogle Apps Script SDK（GAS SDK）向けに実装した配信一覧・配信ログ一覧取得機能について紹介します。

[blastengine - npm](https://www.npmjs.com/package/blastengine)

## 配信一覧・配信ログ一覧機能について

配信一覧と配信ログ一覧では以下のような違いがあります。

- 配信一覧には未送信のバルクメール（一括配信メール）が含まれます
- 配信ログ一覧には、開封日時が含まれます
- 配信ログ一覧は、個別のメールアドレスごとに結果を取得できます
- 配信ログ一覧は、SMTPリレーの結果も取得できます

## コードについて

GAS SDKはMIT Licenseのオープンソース・ソフトウェアです。リポジトリは以下にあります。

[blastengineMania/blastengine-gas: Google Apps Script向けのblastengine SDKです](https://github.com/blastengineMania/blastengine-gas)

## ユーザ登録する

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

![https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/515541ad-b74e-e1e2-ac34-46d181ee2924.jpeg](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キーを取得する

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

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

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

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

## 必要な情報について

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

## ライブラリIDについて

GASのライブラリIDは `1GvJKygDvrhoq9w1FIRepBo1kAB3yo1LucHtL6CIM-KqmaFaxLUbyBdim` になります。こちらをGoogle Apps Scriptのエディタにて、ライブラリとして登録してください。

```
1GvJKygDvrhoq9w1FIRepBo1kAB3yo1LucHtL6CIM-KqmaFaxLUbyBdim
```

![https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/e7bd1386-9893-0d80-226c-d130eb912a1b.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/e7bd1386-9893-0d80-226c-d130eb912a1b.jpeg)

今回はIDを `Blastengine` として解説します。変更している場合はそれぞれ読み替えてください。

## 初回実行時の注意

初回実行時には外部URL（blastengineのAPI）にアクセスを許可するダイアログが出ます。なお、この時に以下のような怖いダイアログが出ます。

![https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/a57beb3b-5ab8-1ca1-a612-97124ce248fb.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/a57beb3b-5ab8-1ca1-a612-97124ce248fb.jpeg)

これはインストール数が増えると消えるらしいのですが、まだ作成したばかりのため表示されてしまうようです。左下にある詳細というリンクから許諾を続行できます。

## 初期化

先ほど取得したユーザー名とAPIキーを使って初期化します。

```
Blastengine.init('YOUR_USER_NAME', 'YOUR_API_KEY');
```

# 配信一覧を取得する

配信一覧はMailクラスにて取得します。結果はトランザクションメール（Transaction）またはバルクメール（Bulk）クラスの配列です。

指定できるパラメーターは[blastengine 配信一覧API](https://blastengine.jp/documents/#tag/deliveries)に依ります。

以下は編集中のバルクメールを一覧取得して、それを削除するコードです。

```jsx
const Mail = Blastengine.mail();
const mails = Mail.find({ size: 100, delivery_type: ['BULK'], status: ['EDIT'] });
for (const bulk of mails) {
	bulk.delete();
}
```

# 配信ログ一覧を取得する

配信ログ一覧はLogクラスにて取得します。結果はLogクラスのインスタンスの配列です。

指定できるパラメーターは[blastengine 配信ログ一覧API](https://blastengine.jp/documents/#tag/logs/operation/log-list)に依ります。

以下はSMTPで配信したメールのログを取得するコードです。

```jsx
const Log = Blastengine.log();
const logs = await Log.find({ delivery_type: ['SMTP'] });
```

# まとめ

配信ログ一覧を使えば、配信したメールが開封されたかをAPIベースで取得できます。また、SMTPリレーで配信されたデータを取得するのにも利用できます。ぜひ運用で活用してください。

blastengineではAPIベースの他、SMTPリレーによるメール配信も利用できます。APIの場合、大量の宛先に対する一括配信も利用できますので、ぜひSDKとともに利用してください。

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