blastengine(ブラストエンジン)はシンプルに使える開発者向けメールサービスを提供しています。何かと面倒なメール配信をシンプルに、かつ確実に送信先へ届けられます。
現在、VBA向けのblastengine SDKを開発しています。Excelを利用していますが、Accessなどでも使えるはずです。この記事では、その使い方を解説します。今回は一回の宛先数が50通を超える場合の一括配信メールの送信方法を解説します。
ユーザ登録する
blastengineにユーザ登録します。管理画面に入るためのユーザID、パスワードが手に入るので、ログインします(ユーザIDは後で使います)。
送信元ドメインのSPFを設定する
送信元として利用するドメイン(自分で持っているもの)の設定をします。これは任意のドメイン管理サービスで設定できますが、TXTレコードに以下のSPFを追加します。
txt @ v=spf1 include:spf.besender.jp ~all
APIキーを取得する
ログイン後、管理画面の右上にある設定メニューに移動します。
そして設定の中で、APIキーを取得します。
必要な情報について
SDKを使う上で必要なのは、先ほどのAPIキーとユーザIDになります。
SDKのインストール
SDKは リリースページでマクロ付きExcelファイルをダウンロードするか、リポジトリの内容をvbacでコンパイルしてください。
blastengineMania/blastengine-vba: blastengineのVBA SDKです
参照設定について
VBAエディタで、ツール > 参照設定 から、以下の参照設定を追加してください。
- Microsoft ActiveX Data Objects 6.1 Library
- Microsoft XML, v6.0
※ 将来的には、参照設定を不要にする予定です。
初期化
先ほどのAPIキーとユーザIDを使って初期化します。
Dim client As new Blastengine
client.ApiKey = "YOUR_API_KEY"
client.UserId = "YOUR_USER_NAME"
バルクオブジェクトの作成
メールを一括配信する際にはバルクオブジェクトを使います。
Dim Bulk As Bulk
Set Bulk = client.Bulk
必要な情報をセットする
続けて、バルクオブジェクトに必要なオブジェクトをセットします。
Bulk.From "info@example.com", "Admin" ' 2つ目の引数(名前)は省略可能
Bulk.Subject = "テストメール"
Bulk.TextPart = "これはテストメールです to __name__"
' 以下は任意
Bulk.HtmlPart = "<h1>これはテストメールです to __name__</h1>" ' HTMLメール
' List-Unsubscribeの設定
Dim dicListUnsubscribe As Dictionary
Set dicListUnsubscribe = New Dictionary
dicListUnsubscribe.Add "url", "https://example.com/unsubscribe/__name__" ' 退会URL(任意)
dicListUnsubscribe.Add "mail", "unsubscribe__name__@example.com" ' 退会メールアドレス(任意)
Bulk.ListUnsubscribe = dicListUnsubscribe
そして、この内容を一旦保存します。
If Bulk.Begin then
' 保存成功
Else
' 保存失敗
' Bulk.Error でDirectory型のエラーメッセージ
Debug.Print JsonConverter.ConvertToJson(Bulk.Error)
End if
宛先を追加する
次に宛先を追加します。50の宛先を超えると、CSVアップロードが必要になります。
Dim i as Long
Dim InsertCode as new Dictionary
For i = 0 To 50
InsertCode.Add "name", "User " & i
Bulk.Email "user" & i & "@example.jp", InsertCode ' InsertCodeはオプションです
Next i
宛先を追加したら、インポートします。そして、インポートが完了するまで待ちます。
If Bulk.Import Then
' 更新成功
While Bulk.Job.Finished = False
Application.Wait (Now + TimeValue("0:00:01"))
Wend
Else
' 保存失敗
' Bulk.Error でDirectory型のエラーメッセージ
End if
メールを送信する
後は Send
メソッドでメールを送信します。引数なしで、即送信されます。
If Bulk.Send Then
' 送信成功
Else
' 送信失敗
' Bulk.Error でDirectory型のエラーメッセージ
End if
時間を指定する場合には、Date型を引数として適用します。
Dim dtDate as Date
dtDate = DateAdd("n", 5, Now) ' 5分後に送信
If Bulk.Send(dtDate) Then
' 送信成功
Else
' 送信失敗
' Bulk.Error でDirectory型のエラーメッセージ
End if
送信成功した場合は Bulk.DeliveryId
に送信IDが入ります。失敗した場合には Bulk.Error
にエラー情報が入ります。これはエラー内容がDictionary型で入っています。
Debug.Print JsonConverter.ConvertToJson(Bulk.Error)
コードについて
コードはGitHubにアップしてあります。ライセンスはMIT Licenseになります。
blastengineMania/blastengine-vba: blastengineのVBA SDKです
まとめ
blastengineには他にも即時送信メールを使ったり、ListUnsubscribeヘッダー機能などもあります。これらの機能も随時実装していきますので、ぜひ皆さんのシステム開発に役立ててください。