Excel/VBAとCustomers Mail Cloudを使ってメール送信を行おう(API)

Customers Mail Cloudではメール送信に際して、SMTPとAPIの二種類を提供しています。昔からの使い慣れたSMTPを使っても良いですし、SMTPのポート制限されている場合でも使えるAPIを利用しても良いでしょう。

今回は対象をExcel(またはVBA)としてメール送信方法を紹介します。VBAから送信を行う場合はSMTPではなく、Web API経由で行うのが簡単です。

APIユーザを作成する

API設定画面にて、APIユーザを作成します。アクセス権限として、SMTPは必須になります。API経由での配信を行う場合はSMTPに加えて、HTTP-APIも有効にしてください。

API経由でのメール送信について

APIサーバについて

APIサーバのエンドポイントURLは契約しているプランによって異なりますのでご注意ください。

プラン名 エンドポイントURL
無料トライアル https://sandbox.smtps.jp/api/v2/emails/send.json
Standardプラン https://te.smtps.jp/api/v2/emails/send.json
Proプラン https://SUBDOMAIN.smtps.jp/api/v2/emails/send.json

SUBDOMAINは、サービス利用開始時に申請いただいたものです

必要なライブラリについて

VBAの参照設定より Microsoft Script Runtime を指定します。また、VBA-tools/VBA-JSON: JSON conversion and parsing for VBAをダウンロードして、JsonConverter.basをインポートしてください。

f:id:moongift:20201218161258p:plain
参照設定

変数を設定する

まずメール送信に必要な変数を準備します。

Dim params As New Dictionary
params.Add "api_user", "api@smtps.jp"
params.Add "api_key", "YOUR_API_KEY"

; メールの送信先です
Dim toAddress(0) As New Dictionary
toAddress(0).Add "name", "Tester"
toAddress(0).Add "address", "user@smtps.jp"

params.Add "to", toAddress

; メールの送信元情報です
Dim fromAddress As New Dictionary
fromAddress.Add "name", "Admin"
fromAddress.Add "address", "info@smtps.jp"
params.Add "from", fromAddress

; メールの件名と本文です
params.Add "subject", "Test mail"
params.Add "text", "Test mail body"

Dictinaryで設定しているキーについて 共通仕様 | Customers Mail Cloud を参照してください。

送信を行う

ではAPIサーバのエンドポイントURLと配信情報のパラメータを使ってメール送信を行います。メール送信APIはPOSTメソッドを使います。HTTPアクセスはMSXML2.ServerXMLHTTP.6.0を利用します。

Dim httpReq As Object
Set httpReq = CreateObject("MSXML2.ServerXMLHTTP.6.0")

Dim url As String
url = "https://sandbox.smtps.jp/api/v2/emails/send.json"

そしてHTTPリクエストを実行します。

httpReq.Open "POST", url, False
httpReq.setRequestHeader "Content-Type", "application/json"

httpReq.send (JsonConverter.ConvertToJson(params))

; レスポンス
Debug.Print httpReq.responseText

送信が成功すると、下記のようにメールIDが返ってきます。

{"id":"\u003C1027790501.15820.1560515882392@mta01.sandbox.smtps.jp\u003E"}

エラーがあると、下記のようにエラー内容が返ってきます。

b'{"errors":[{"code":"02-001","field":"text","message":"text is required."}]}'

まとめ

Excelでメールアドレスをまとめて管理されている方も多いでしょう。そうしたメールアドレスの活用時にCustomers Mail CloudのWeb APIが役立ちます。SMTP接続はDLLなどを利用するので敷居が高いでしょう。APIをぜひ使ってみてください。今回はVBAを使いましたが、汎用的なHTTPアクセスを行っていますので、他のプログラミング言語でも簡単に実装できるでしょう。

さらに詳しい使い方についてはEmail Sending APIを参照してください。