blastengineはじめました

# はじめに
Qiitaから[Advent Calendar](https://qiita.com/advent-calendar/2023/blastengine)に参加しないかとメールを頂いたが、協賛企業のサービス `blastengine` をまったく知らない。
これは勉強しろという神の思し召しに従って、トライアルを動かすまでの流れをこの記事を書きながらやってみたいと思います。

# blastengineって？
[Web Site](https://blastengine.jp/)での紹介は以下の内容でした。

:::note info
blastengineはお客様のシステムをAPIやSMTPリレーで連携することで簡単に一斉配信やトランザクションメールを配信することができます。運用・メンテナンスはblastengineで行うため、常に高いIPレピュテーションを保ってメールを送ることができ、エンジニアを面倒な業務から解放します。
:::

つまり、メール配信サービスということですね。
正直、いろいろアプリ作ってると自分や利用者にメール通知する仕組みはほしいことが多いので、Sendgridも使ったりしてるけれど、せっかくなのblastengineも使ってみよう。

料金プランを見てみると、トライアルでも月に10000件まで送れるのはすごいですね！宛先は5件までという制約があるみたいですが。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651598/2b6a15b3-4e37-e0e0-b993-8bf39ddb1dde.png)


# 無料トライアルをスタートしよう
まず、アクセス先は[こちら](https://app.engn.jp/be/order/request-form)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651598/6964b72e-d350-fc16-32d9-38317fabf6f7.png)

さて、私の個人メールアドレス(gmail)で作成できるか。。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651598/708e3e45-528c-ace7-8dba-e73b7a9b5b74.png)

良かった。gmailでも大丈夫だった。どことは言わないけれど、私がよく使うクラウドなんて、gmailでアカウント作ろうとしたら、最近はFraud(詐欺)の可能性があるからって作れなかったりするから心配でした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651598/6e816213-8829-256b-9427-e134d342668a.png)

無事にメールも届きましたね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651598/3bde319b-30ca-e244-ca6d-2ea7939a5d3d.png)

パスワードも無事に設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651598/8cc7b0e9-e96a-bd44-6e2b-b69742ad2c5a.png)
(さっきも同じような画面見たな。。。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651598/038b5824-7438-7fce-20c1-9ef6f97a8fc9.png)

無事にメールも届きました。オンラインで事例紹介や説明会もやってくれるらしいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651598/c083a22b-1fe6-eb64-569d-35f8ea3d823e.png)
メールヘッダーを眺めたけど、特に変なものも見つからず（当たり前）

リンク先のログイン画面で、メールに連携されたID、設定したパスワードを入力してログイン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651598/f979bc8f-e80d-dd8a-dbec-0c948cb2ddf8.png)

ログインできた！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651598/821ccc2b-b042-ccef-2307-efc42bb8bb0f.png)

ん？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651598/275d7b6c-e82f-b69f-eb5d-ff74faa35d48.png)

なるほど、トライアルだと設定された5件のアドレスにしか送信できないんですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651598/4dddb083-62b3-3ba8-c5b5-471926a95f2d.png)

とりあえずアカウント作成に利用した自分のアドレスを登録しておきます。
変更回数に制約があるので、トライアルでメール送信時に5件以上ある場合、例えば[Pupeteer](https://github.com/puppeteer/puppeteer)等を使って、裏で5件設定してはプログラムで書き換えて、次の5件を送信するって、やろうとしてもすぐ上限に到達しちゃうので、対策がされてますね。悪い発想ができないようになってます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651598/46aa0934-945a-01b9-1d45-0f0ed9ee21db.png)

設定画面に飛んで、APIキーを取得しましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651598/4eda94d4-7c22-d251-4c60-91cb033e737c.png)

APIキーが表示されるので、控えておきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651598/3d6a7500-fab4-9a89-5087-e7bc035adbf0.png)

# Node.jsでメール送信してみる
こちらの記事を参考にしてみましょう。

https://qiita.com/goofmint/items/e237dbd9c5dbabc4bf47

事前に以下をnpmでインストールしています。
```console
npm install dotenv
npm install blastengine
```

```javascript:index.js
require('dotenv').config();
const { BlastEngine, Transaction } = require('blastengine');
new BlastEngine(process.env.BE_USER_ID, process.env.BE_APIKEY);

(async () => {
  const transaction = new Transaction;
  transaction
	.setFrom('アカウント作成で使ったメールアドレス', 'Admin')
	.setSubject('メールの件名')
	.setTo('アカウント作成で使ったメールアドレス')
	.setText('メールの本文');

  const res = await transaction.send();
  console.log(JSON.stringify(res));
})();
```
では実行してみよう。
```console
C:\qiita\blastengine>node index.js
{"delivery_id":1}
```
`delivery_id`で数字が応答されるとOKらしい。

メールも無事に配信されました！(迷惑メールに分類されてたけれど)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651598/97325e50-27d1-d2e1-b6af-fea91e722ca0.png)

# ちなみにSendgridのコードの場合は

```javascript:sendgrid.js
require('dotenv').config();
const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(process.env.SENDGRID_APIKEY);

(async () => {
  const msg = {
    to: process.env.SENDGRID_FROM_ADDRESS,
    from: process.env.SENDGRID_FROM_ADDRESS,
    subject: 'メールの件名',
    text: 'メールの本文',
  };
  const res = await sgMail.send(msg);
  console.log(JSON.stringify(res));
})();
```

```console
C:\node-apps\node-apps\qiita\blastengine>node sendgird.js
[{"statusCode":202,"body":"","headers":{"server":"nginx","date":"Tue, 05 Dec 2023 08:26:33 GMT","content-length":"0","connection":"close","x-message-id":"q-xxxxxxxxxxxx-xxxxxx","access-control-allow-origin":"https://sendgrid.api-docs.io","access-control-allow-methods":"POST","access-control-allow-headers":"Authorization, Content-Type, On-behalf-of, x-sg-elas-acl","access-control-max-age":"600","x-no-cors-reason":"https://sendgrid.com/docs/Classroom/Basics/API/cors.html","strict-transport-security":"max-age=600; includeSubDomains"}},""]
```
こんな感じでコードを書いて、応答が得られます。
Sendgridだと、ステータスコード `202` で応答されたとしても実際に配信されるかは定かではない、というのは別の記事で書かせて頂きました。実際このコードを動かした時はSendgridのアカウントが凍結状態に近いので、コードは正常に動作しましたが、Sendgrid側でメール配信が停止されている、という状況になっています。
(今Support Ticketを起票して解除できないかSendgridに依頼中)

https://qiita.com/katahiro/items/881bd52163d1f4c7c43c

# blastengineの良さって？
とりあえず、トライアルを使ってみようと動き出してから使えるようになるまでが早いですね！
良いか悪いか別として、個人のgmailでもアカウント開設ができ、すぐに動かすことが出来ました。

今、Sendgridは個人利用が禁止になっているので、法人の情報が無いとそもそもアカウント作成ができません。アプリ開発での技術検証や情報発信で利用したいと申請しても却下されました。

個人でアプリ作って、個人、もしくは身内レベルでのアプリ活用、その中でメール配信を簡易に組み込みたいとした場合に、blastengineは、例えばアプリのワークフローの一環でシステム管理者の自分にメール配信したい、といったことをすぐに実現できます。

企業でも、特定のシステム担当者への通知や、インフラ担当者が参加しているグループメールアドレスといったものを登録すれば、トライアルアカウントでもとても助かるサービスになりそう。

# さいごに
野良エンジニアにとって嬉しいサービスだったので、こちらに紹介記事を書かせて頂きました。
このAdvent Calendarを連絡してくれたQiitaの方と、トライアルでも非常に使えるサービスを提供しているblastengineに対して、こちらで感謝させて頂きます。

また、メール送信の実装をしていると、いくつか気づく点があったので、14日目の記事でblastengineを使ってメール送信をNode.jsで実装する際の注意点を紹介させていただきます！