LoginSignup
1
0

blastengineを使ってVBAでメールを送信する

Posted at

blastengineはシンプルに使える開発者向けメールサービスを提供しています。何かと面倒なメール配信をシンプルに、かつ確実に送信先へ届けられます。

今回はblastengineを使って、VBAでメール送信を行うまでの流れを解説します。Excel VBAなどで使える方法になります。

ユーザ登録する

blastengineにユーザ登録します。管理画面に入るためのユーザID、パスワードが手に入るので、ログインします(ユーザIDは後で使います)。

getting-started-4.jpg

送信元ドメインのSPFを設定する

送信元として利用するドメイン(自分で持っているもの)の設定をします。これは任意のドメイン管理サービスで設定できますが、TXTレコードに以下のSPFを追加します。

txt @ v=spf1 include:spf.besender.jp ~all

APIキーを取得する

ログイン後、管理画面の右上にある設定メニューへ移動します。

getting-started-6.jpg

そして設定の中で、APIキーを取得します。

getting-started-5.png

API経由で配信する

今回はAPIを使ってHTMLメールを配信する流れを紹介します。今回利用したライブラリは以下の通りです。

ライブラリを読み込む

VBA-tools/VBA-Web でダウンロードできるVBA-Web - Blank.xlsmをベースに進めます。この中に、 VBA-JSON のモジュールファイル、SHA256・Base64の関数を追加しています。

必要な変数を取得

ベースになる関数です。 YOUR_API_USERYOUR_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リクエストするためのトークンを生成します。手順としては次のとおりです。

  1. ユーザIDとAPIキーを連結する
  2. SHA256のハッシュを生成する
  3. ハッシュを全て小文字にする
  4. 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を使ってみてください。

エンジニア向けメール配信システム「ブラストエンジン」

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0