blastengine(ブラストエンジン)はシンプルに使える開発者向けメールサービスを提供しています。何かと面倒なメール配信をシンプルに、かつ確実に送信先へメールを届けられます。
現在、C#向けに、blastengine SDKを開発しています。.NET6以上を対象としているので、macOSを含め幅広い環境で実行できるはずです。
今回は、バルクメール(一括配信メール)でCSVインポートを行う方法を解説します。
ユーザ登録する
blastengineにユーザ登録します。管理画面に入るためのユーザID、パスワードが手に入るので、ログインします(ユーザIDは後で使います)。
送信元ドメインのSPFを設定する
送信元として利用するドメイン(自分で持っているもの)の設定をします。これは任意のドメイン管理サービスで設定できますが、TXTレコードに以下のSPFを追加します。
txt @ v=spf1 include:spf.besender.jp ~all
APIキーを取得する
ログイン後、管理画面の右上にある設定メニューに移動します。
そして設定の中で、APIキーを取得します。
必要な情報について
SDKを使う上で必要なのは、先ほどのAPIキーとユーザIDになります。
SDKのインストール
SDKはNuGetでリリースしています。Visual StudioのNuGetパッケージの管理よりインストールしてください。
初期化
先ほどのAPIキーとユーザIDを使って初期化します。
new Blastengine.Client("YOUR_USER_ID", "YOUR_API_KEY");
メールオブジェクトの作成
メールを大量に配信する場合には、バルクメールオブジェクトを作成します。
var bulk = new Blastengine.Bulk();
必要な情報をセットする
続けて、必要な情報をセットします(トランザクションメールも同様に)。
bulk.Subject = "テストメール from C#";
bulk.TextPart = "これはテストメールです to __name__";
bulk.HtmlPart = "<h1>これはテストメールです to __name__</h1>";
bulk.From = new Blastengine.From("info@example.com", "Admin");
添付ファイルを追加する
添付ファイルは Attachments
プロパティにファイルのパスをセットします。
bulk.Attachments.Add("path/to/file1.txt");
bulk.Attachments.Add("path/to/file2.txt");
保存する
バルクメールの場合は、 Begin
メソッドを使って一度保存します。
var bol1 = await bulk.Begin();
宛先データをインポートする
大量の宛先の場合は、データをインポートします。CSVファイルのパスを指定するか、ByteArrayContentで指定します。
var job = await bulk.Import("path/to/csvfile.csv");
ステータスチェック
インポートは非同期処理で行われます。返却値の job
を使って、ステータスをチェックします。
while (!(await job.Finished()))
{
await Task.Delay(5000); // 5秒待つ
}
エラーチェック
インポート処理が完了後、エラーの有無を確認します。 GetError
で返ってくるデータは、エラーデータのCSVを変換したものになります。
if (job.IsError())
{
// エラーあり
var errors = await job.GetError();
// エラー内容を確認
errors[0]["エラーメッセージ"] // エラーメッセージ
errors[0]["email"] // メールアドレス
}
送信する
送信は Send
メソッドを使います。引数として、配信予定日時を指定できます。
// 即時配信
var res = await bulk.Send();
// 予約配信(10分後)
var res = await bulk.Send(DateTime.Now.AddMinutes(10));
コードについて
コードはGitHubにアップしてあります。ライセンスはMIT Licenseになります。
blastengineMania/blastengine-csharp: blastengineのC# SDKです
まとめ
blastengineには、他にも1クリックでの購読停止機能や、Webhookなどの仕組みがあります。他の機能も随時実装していきますので、ぜひ皆さんのシステム開発に役立ててください。