blastengineはシンプルに使える開発者向けメールサービスを提供しています。何かと面倒なメール配信をシンプルに、かつ確実に送信先へ届けられます。
今回はblastengineを使って、VBAでメール送信を行うまでの流れを解説します。Excel VBAなどで使える方法になります。
ユーザ登録する
blastengineにユーザ登録します。管理画面に入るためのユーザID、パスワードが手に入るので、ログインします(ユーザIDは後で使います)。
送信元ドメインのSPFを設定する
送信元として利用するドメイン(自分で持っているもの)の設定をします。これは任意のドメイン管理サービスで設定できますが、TXTレコードに以下のSPFを追加します。
txt @ v=spf1 include:spf.besender.jp ~all
APIキーを取得する
ログイン後、管理画面の右上にある設定メニューへ移動します。
そして設定の中で、APIキーを取得します。
API経由で配信する
今回はAPIを使ってHTMLメールを配信する流れを紹介します。今回利用したライブラリは以下の通りです。
-
VBA-tools/VBA-Web
Windows、macOSで使えるHTTPクライアント -
VBA-tools/VBA-JSON
JSONライブラリ -
Excel VBA で SHA256 #Excel - Qiita
SHA256のハッシュを計算する方法 -
【参照設定不要】Base64フォーマットにエンコードする - VBA入門
Base64エンコードの方法
ライブラリを読み込む
VBA-tools/VBA-Web でダウンロードできるVBA-Web - Blank.xlsmをベースに進めます。この中に、 VBA-JSON
のモジュールファイル、SHA256・Base64の関数を追加しています。
必要な変数を取得
ベースになる関数です。 YOUR_API_USER
と YOUR_API_KEY
はそれぞれblastengineのユーザIDとAPIキーに置き換えてください。
Sub SendMailTest()
Dim ApiUser As String
Dim ApiKey As String
Dim DeliveryId As Integer
ApiUser = "YOUR_API_USER"
ApiKey = "YOUR_API_KEY"
DeliveryId = SendMail(ApiUser, ApiKey)
Debug.Print DeliveryId
End Sub
Function SendMail(ApiUser As String, ApiKey As String) As Integer
' この中に処理を記述します
End Function
トークンを生成する
APIリクエストするためのトークンを生成します。手順としては次のとおりです。
- ユーザIDとAPIキーを連結する
- SHA256のハッシュを生成する
- ハッシュを全て小文字にする
- 3の文字列をBASE64エンコードする
実際のコードで言うと、次のようになります。 token
がトークンです。それぞれの関数は上記のリンク先を参考にしてください。
' 認証用トークンの生成
Dim token As String
token = EncodeToBase64(SHA256(ApiUser & ApiKey))
APIリクエストする
では実際にメールを送信します。APIのエンドポイントは https://app.engn.jp/api/v1/deliveries/transaction
になります。生成したトークンは Authorization
ヘッダーに適用します。fromのemailやtoなど、メールアドレスは利用するものに書き換えてください。
' Webクライアント
Dim Client As New WebClient
Client.BaseUrl = "https://app.engn.jp"
' トランザクション用のリクエスト生成
Dim Request As New WebRequest
Request.Resource = "/api/v1/deliveries/transaction"
Request.Method = WebMethod.HttpPost
Dim From As New Dictionary
Dim Body As New Dictionary
From.Add "email", "no-reply@example.com"
From.Add "name", "送信者サンプル"
Body.Add "to", "user@example.jp"
Body.Add "from", From
Body.Add "subject", "テスト件名"
Body.Add "encode", "UTF-8"
Body.Add "text_part", "テスト配信"
Body.Add "html_part", "<!DOCTYPE html><html><header></header><body>sample html</body></html>"
Set Request.Body = Body
' ヘッダー作成
Request.AddHeader "Authorization", "Bearer " & token
Request.AddHeader "Content-Type", "application/json"
' WebHelpers.EnableLogging = True ' デバッグ用
' レスポンスオブジェクト
Dim Response As WebResponse
Set Response = Client.Execute(Request)
' 結果を格納
If Response.StatusCode <> WebStatusCode.Created Then
Err.Raise 400, "blastengine", Response.Content
End If
' JSONをパース(デフォルトでは失敗するため、VBA-JSONを利用)
Dim Json As Object
Set Json = JsonConverter.ParseJson(Response.Content)
SendMail = CInt(Json("delivery_id"))
結果
レスポンスは以下のようになっています。これを VBA-JSON
でパースして、 delivery_id
を取得しています。
{
"delivery_id": 9
}
注意点
デフォルトのSHA256関数はWindowsでしか動作しません。macOSではシェルを使うようにすれば良いのですが、期待した結果が返ってこないため現状はWindowsのみで動作するコードとなっています。
まとめ
Excel VBAやAccessからメール送信できると、手軽にシステム化が実現できます。また、メールなどにコピペして手作業で送信しているとミスする可能性もありますので、自動化すればミス軽減にもつながります。
VBAからも、ぜひblastengineを使ってみてください。