Access

スパイラルAPIを使ってACCESSからメールを送る方法

記事内に商品プロモーションを含む場合があります

以前Accessからメールを送る方法としてoutlookを使う方法、CDOを使う方法をご紹介しました。

これらの方法は無料で手軽に実装できる方法として有効ですが、メールの到達率が悪い、ログの詳細が分からないなどデメリットもありました。

スパイラル(SPIRAL)のメール送信は到達率も高くログも詳細で重宝していたので、APIを使ってACCESSからのメール送信をスパイラルに切り替えることにしました。

スパイラルの契約は有料ですが量によっては低額で利用できますので検討してみてはいかがでしょうか?

VBAメール送信
AccessからVBAでメールを送信する2つの方法AccessからVBAを使ってメールを送信する方法はoutlookを使う方法とCDOを使う方法があります。両方の作り方のサンプルコードあります。...

 

なお、スパイラル(SPIRAL)については「スパイラルとは」のページをご確認ください。

スパイラルAPIを使ってACCESSからメールを送る方法

スパイラルからAPIでメール送信の概要

スパイラルを使ってメールを送るには、まずはテーブルに送信先アドレスなどのデータが格納されている必要があります。

主な手順は以下の通りです。

  1. スパイラルにメール送信用テーブルを作成する
  2. AccessからAPIを使ってデータを作成する(Delete/Insert)
  3. AccessからAPIを使ってメールを送信する

今回は①と②がすでに完了していることを前提に③の処理をご紹介します。

なお、①のテーブルにはメール宛先アドレス、配信エラー用フィールドが必須です。

本文に差し込みしたい場合は差し込み置換用のフィールドも用意しておきます。

スパイラルに作成したテーブルにACCESS VBAからデータを追加・削除する方法最近はAccessツールからのメール送信にスパイラルを利用しています。 メールの到達率・セキュリティも高く、かつ送信ログが確認でき...

スパイラルAPIをCALLする前の準備

スパイラルAPIの引数としてメール送信内容をJSON形式で作成する必要があります。

JSONを作成するにあたり、ConvertToJson()関数が必要になりますが、ConvertToJson()については以下の記事を参照してください。

AccessVBAでJSONフォーマットのデータを作成するAccessからAPIをコールしてクラウドサービスから情報を取得することになりました。 APIの引数と戻り値の形式はJSONフォー...

スパイラルAPI用のJSONデータ作成

メール送信用のサンプル情報はスパイラルのサポートサイトに公開されていますが、ちょっと分かりにくいかな…という印象です(;^_^A

Express2の機能でメール送信しますが、引数となるJSONの全項目はこちらのページに記載されています。

以下、最低限必要な項目のみ列挙します。

※1) spiral_api_token APIトークン
※2) passkey epoch秒。
※3) signature 署名
db_title DBテーブル名
ail_field_title メールアドレスフィールドのフィールド名
reserve_date 配信予約日時。 即時配信は、 now を指定する。00分と30分のみ指定可能。
subject 件名
mail_type メール種別 省略時はテキストメール扱い
body_text 本文
from_address 差出人メールアドレス
from_name 差出人名
error_field_title 配信エラーフィールドのフィールド名
error_auto_update 配信エラーを自動反映する。 反映する=true, 反映しない=false
error_auto_exclude 配信エラーを除外する。 除外する=true, 除外しない=false

※1 APIトークンはスパイラルにログイン後、開発タブ→APIトークン→【トークン発行】で取得した文字列です。

※2 epock(エポック)秒(UNIX時間)とは、1970年1月1日0時0分0秒からの経過秒数です。署名の有効期限チェックに使用されます。

※3 signatureはトークンとepock秒、シークレットコードをハッシュ化したものです。

以下、サンプルテキストです。

' *==============================================================
' * メール送信用のJsonテキスト作成処理
' *
' * @param strjson 作成したJsonテキスト
' * @return True/False
' *==============================================================
Public Function MakeJson(ByRef strjson As String, strTitle, strText, strFrom, strFromName) As Boolean
    
    Dim param           As New Dictionary
    Dim intPass         As Long
    Dim strsignature    As String
    
    On Error GoTo Err_Exit
    
    '戻り値の初期化
    MakeJson = False
    
    intPass = DateDiff("s", #1/1/1970 9:00:00 AM#, Now)
    strsignature = HmacSha1(csToken & "&" & CStr(intPass), csSecret)
    
    param.Add "spiral_api_token", csToken
    param.Add "passkey", intPass
    param.Add "signature", strsignature
    param.Add "db_title", csMailTable
    param.Add "mail_field_title", "f002188671"
    param.Add "reserve_date", "now"
    param.Add "subject", strTitle
    param.Add "mail_type", "text"
    param.Add "body_text", strText
    'param.Add "body_html", 1
    param.Add "from_address", strFrom
    param.Add "from_name", strFromName
    param.Add "error_field_title", "f002214251"
    param.Add "error_auto_update", "true"
    param.Add "error_auto_exclude", "false"
    '連想配列からJSONフォーマットに変換
    strjson = ConvertToJson(param)
    
        
    Debug.Print strjson
    MakeJson = True
    
    Exit Function
    
Err_Exit:
    MsgBox Err.Number & ":" & Err.Description, vbOKOnly + vbCritical
 
End Function

この関数には引数として以下の値を渡しています。

strJSON 完成したJSONデータを格納するフィールド
strTitle メールの件名
strText メールの本文
strFrom 差出人メールアドレス
strFromName 差出人名

これでスパイラルメール送信APIに渡すJSONデータの準備ができました!

メール本文に差し込み文字を挿入したい場合

本文に差し込み文字を挿入したい場合は、上記のJSON、body_textにメール送信用テーブル内のフィールド名をセットします。

%val:usr:f002221957%  様

いつもお世話になっております。

この度は、〇〇へのお申込み誠にありがとうございます。

スポンサーリンク

スパイラルAPIをCALLしてメール送信

後は出来上がったJsonデータを引数にAPI関数をコールします。

   
' *==============================================================
' * SPIRALのAPI関数コール
' *
' * @param request POST/GET
' * @param url
' * @param accesstken(Encodeが必要であればEncode済みの文字列)
' * @param param(jsonオブジェクト)
' * @return responseテキストデータ
' *==============================================================
Public Function CallSpiralApi(ByVal param As String, ByVal request_kind As String) As String

    On Error GoTo Err_Exit
    
    With CreateObject("MSXML2.XMLHTTP")
        .Open "POST", "https://reg18.smp.ne.jp/api/service", False
        
        'Basic認証
        .setRequestHeader "X-SPIRAL-API", request_kind
        .setRequestHeader "Content-Type", "application/json; charset=UTF-8"
        .send param
        
        '結果が戻るまで待機
        Do While .readyState < 4
            DoEvents
        Loop

        'デバッグは↓をアンコメントしてレスポンスを確認
        Debug.Print .responseText
        
        '.responseTextを戻り値とする
        CallSpiralApi = .responseText
        
    End With
    
    Exit Function
    
    
Err_Exit:
    MsgBox Err.Number & ":" & Err.Description, vbOKOnly + vbCritical
   
    
End Function

※送信後のログなどはスパイラルの配信履歴からログデータをダウンロードしてご確認ください。

スポンサーリンク

まとめ

メールを確実に相手に届けるにはメール到達率の高いサービスを利用する必要があります。

その点ではスパイラルはかなり優秀だと思っていますので、ぜひ一度検討されてはいかがでしょうか?

ABOUT ME
アズビーパートナーズ
プログラマー→社内SE→SIerのお仕事をしています。 メーカー勤務を経て、中小企業の社内SE、フリーランスなど様々な形態で働いてきました。 業務上生まれた困った…を解決してきたTipsを備忘録も兼ねて公開しています。 困っている誰かのお役に立てれば幸いです。