LoginSignup
1
1

More than 1 year has passed since last update.

Google Apps Scriptでblastengineを使ってメール送信を行う(添付ファイル付きメール)

Last updated at Posted at 2022-10-23

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

今回は今開発中のGoogle Apps Script用SDK(以下GAS SDK)を使って添付ファイル付きのメール送信を行う方法を紹介します。

コードについて

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

blastengineMania/blastengine-gas: Google Apps Script向けのblastengine SDKです

ユーザ登録する

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

getting-started-4.jpg

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

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

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

APIキーを取得する

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

getting-started-6.jpg

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

getting-started-5.png

ライブラリIDについて

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

1GvJKygDvrhoq9w1FIRepBo1kAB3yo1LucHtL6CIM-KqmaFaxLUbyBdim

blastengine-3.jpg

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

初回実行時の注意

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

blastengine-1.jpg

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

初期化

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

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

メールオブジェクトの用意

blastengineでは即時配信されるトランザクションメールと、一括配信のバルクメールがあります。執筆時点(2022年4月現在)では、SDKはトランザクションメールのみ対応してます。

const transaction = Blastengine.transaction();

配信元、配信先を設定

件名や宛先などをセットします。

transaction.fromEmail = 'info@example.com';
transaction.setTo('user@example.jp');
transaction.subject = 'Test subject';
transaction.setText('Test body');

添付ファイルを追加する

添付ファイルは addAttachment メソッドを使います。Blobをセットすれば良いので、リソースはリモートやGoogle Driveどちらでも使えます。

// Google Drive
const file = DriveApp.getFileById('DRIVE_FILE_ID');
transaction.addAttachment(file.getBlob());
// リモート
const response = UrlFetchApp.fetch('https://example.com/logo.jpg');
transaction.addAttachment(response.getBlob());

送信する

送信を実行します。GASなのでネットワーク処理は同期になります。

const res = transaction.send();

結果の res には、デリバリーIDが入ってきます。このIDを使って配信状況を確認できます。

console.log(res);
// { delivery_id: 188 }

Tips

blastengineのAPIでは、fileパラメータに複数ファイルを添付してAPI呼び出しを行います。GASのUrlFetchAppはパラメータをJSONオブジェクトで渡すので、1つのキーに対して複数パラメータを設定できません。配列は使えませんでした。

そこでGoogle Apps Scriptを使ってmultipart/form-dataタイプでHTTPリクエストする - Qiitaで作成されているFetchAppを試したのですが、こちらも複数指定はできませんでした。そのためFetchAppを参考にして、独自でboundaryを生成しています。

この辺りのコードなのですが、コツはpayloadに適用するバイト文字列は1次元の配列になっている必要があります。バイト文字列の生成は Utilities.newBlob で任意の文字列からBlobを生成して、 getBytes メソッドで取得するのが一番手軽です。

テキストファイルであればバイト文字列化は不要ですが、画像などのバイナリファイルを multipart/form-data で送信する際には必須になります。あまりないとは思いますが、GASでmultipart/form-data送信を自作する場合には参考にしてください。

まとめ

GAS SDKを使えばスプレッドシートからメールを一括配信したり、Googleフォームから個人ではないFromを使って返信できます。Gmailでは1日の配信件数に限界がありますが、blastengineを使えばそういった心配は無用です。

ぜひblastengineをお試しください!

エンジニア向けメール配信システム「ブラストエンジン」

1
1
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
1
1