blastengineはエンジニアフレンドリーなメール配信サービスです。APIとSMTPリレーの両方をサポートしており、手軽に素早くメール配信ができるようになっています。
今回はVBA SDKでメールの種類(即時配信、一括配信など)を気にせずに利用できるMailクラスを作成しましたので、その使い方を解説します。
ユーザ登録する
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"
メールの種類
blastengineで利用する主なメールの種類は以下の2つになります。
メール種別 | 添付ファイル | 即時配信 | 宛先 | CC・BCC | 配信日時指定 |
---|---|---|---|---|---|
トランザクションメール | ○ | ○ | 1つ | ○ | × |
バルクメール | ○ | ○ | 複数 | × | ○ |
MailクラスではCCとBCCを指定しながら、配信日時を指定しようとするとエラーになるので注意してください。
Mailクラスの使い方
Mailクラスには以下のメソッド・プロパティが用意されています。
単数指定
- DeliveryId(ByVal Value As Long)
- Subject(ByVal Subject As String)
- Encode(ByVal Encode As String)
- TextPart(ByVal TextPart As String)
- HtmlPart(ByVal HtmlPart As String)
- ListUnsubscribe(ListUnsubscribe As ListUnsubscribe)
複数停止
- Cc(i As Long, ByVal Email As String)
- Let Bcc(i As Long, ByVal Email As String)
- Attachments(i As Long, ByVal FilePath As String)
メソッド
- Sub From(Email As String, Optional Name As String = "")
- Sub Email(ByVal Email As String, Optional ByVal InsertCode As Dictionary = -1)
コード例
Dim Mail As Mail
Set Mail = Client.Mail
Mail.From "info@example.com"
Mail.Subject = "テストメール from Excel"
Mail.TextPart = "メールの本文です __name__, __name2__"
Dim InsertCode As Dictionary
Set InsertCode = New Dictionary
InsertCode.Add "name", "Test"
InsertCode.Add "name2", "Test 2"
Mail.Email "user@example.jp", InsertCode
メールを送信する
後は Send
メソッドでメールを送信します。引数なしで、即送信されます。宛先が1件だった場合にはトランザクションメールとして、複数の場合はバルクメールとして送信されます。
バルクメールの場合、宛先が50件を超えるとCSVアップロードになります。とはいえ、実装時には気にする必要はありません。
If Mail.Send Then
' 送信成功
Else
' 送信失敗
' Mail.Error でDirectory型のエラーメッセージ
End if
時間を指定する場合には、Date型を引数として適用します。
Dim dtDate as Date
dtDate = DateAdd("n", 5, Now) ' 5分後に送信
If Mail.Send(dtDate) Then
' 送信成功
Else
' 送信失敗
' Mail.Error でDirectory型のエラーメッセージ
End if
送信成功した場合は Mail.DeliveryId
に送信IDが入ります。失敗した場合には Mail.Error
にエラー情報が入ります。これはエラー内容がDictionary型で入っています。
Debug.Print JsonConverter.ConvertToJson(Mail.Error)
コードについて
コードはGitHubにアップしてあります。ライセンスはMIT Licenseになります。
blastengineMania/blastengine-vba: blastengineのVBA SDKです
まとめ
blastengineには他にも即時送信メールを使ったり、ListUnsubscribeヘッダー機能などもあります。これらの機能も随時実装していきますので、ぜひ皆さんのシステム開発に役立ててください。