blastengineはエンジニアフレンドリーなメール送信サービスです。メールを即時配信するトランザクションと、一括配信するバルクメールに対応しています。
バルクメールでは、まずテンプレートを保存します。そして、そのテンプレートに対して宛先情報を登録して送信を行います。その際、以下のようなエラーメッセージが出る場合があります(エラーメッセージは加工済み)。
Exception: Error in main: number of EDIT statuses exceeds 10.
これは、EDIT(メール送信されていない状態)のメールテンプレートは10個までしか保存できないことに起因して発生するものです。こうした状態のメールは適宜削除、または送信処理を行う必要があります。
削除対応について
今回はNode.js SDKを使って削除してみます。インストールは npm
コマンドで行います。
npm i blastengine
ライブラリのインポート
ライブラリをインポートします。TypeScriptなので、実行時には ts-node
も必要でしょう。
import { BlastEngine, Bulk } from 'blastengine';
初期化
blastengineのユーザー名、APIキーを用いて初期化します。
USER_NAME = 'YOUR_USER_NAME';
API_KEY = 'YOUR_API_KEY';
new BlastEngine(USER_NAME, API_KEY);
処理をループする
2022年12月現在、EDITのメールだけを検索するといった機能がないので、ループ処理で対応します。
MIN_NUMBER = 1;
MAX_NUMBER = 1200;
for (let i = MIN_NUMBER; i < MAX_NUMBER; i++) {
// 以下はこの中に記述
}
バルクメールを作成する
バルクメールオブジェクトを作成し、デリバリーIDを適用します。
const bulk = new Bulk;
bulk.delivery_id = i;
情報を取得
メールの情報を取得し、そのステータスがEDITであれば削除します。
try {
await bulk.get();
if (bulk.status === 'EDIT') {
console.log(`Delete: ${bulk.delivery_id}`);
await bulk.delete();
}
} catch (e) {
}
ウェイトする
API負荷を考慮して、500ms処理待ちします。
await new Promise((res) => setTimeout(res, 500));
これで完成です。
全体の処理
全体の処理は以下のようになります。
USER_NAME = 'YOUR_USER_NAME';
API_KEY = 'YOUR_API_KEY';
MIN_NUMBER = 1;
MAX_NUMBER = 1200;
new BlastEngine(USER_NAME, API_KEY);
for (let i = MIN_NUMBER; i < MAX_NUMBER; i++) {
const bulk = new Bulk;
bulk.delivery_id = i;
try {
await bulk.get();
if (bulk.status === 'EDIT') {
console.log(`Delete: ${bulk.delivery_id}`);
await bulk.delete();
}
} catch (e) {
console.log(`${bulk.delivery_id}`);
}
await new Promise((res) => setTimeout(res, 500));
}
まとめ
将来的には10個までの制限撤廃や、EDIT状態のメール検索などが提供されるかも知れません。取り急ぎ2022年12月現在では、以上のような対応になります。もしblastengineを使っていて上記エラーが出たら、今回の対応を行ってください。