2020-12-26に投稿

EXCEL VBAからSendGrid WebAPI経由でメール送信

はじめに

(Qrunch からの移管記事です)

タイトルの通り、EXCEL VBAからSendGridのWebAPI経由でメール送信をする方法を記載。
「WebAPIとか全然わからない」の状態から頑張って送信までできるようにしました。

普通はCDO.MessageでSendGridへSMTP通信すればいいだけですが、
ネットワーク構成の都合上「外部へのSMTP通信は不許可、HTTP/HTTPSはOK(ただし認証プロキシあり)」という環境化だったので、WebAPIを利用せざるをえませんでした。
⇒むしろSendGridにWebAPIがあってよかった。

同じような境遇の人がいたら参考にしてください。(いるか?)

参考URL

1.VBAでのWEB API
https://qiita.com/haseshin/items/4acf31db9a672ed691df
2.VBAでのWEB API & JSON
https://qiita.com/MakotoIshikawa/items/be902e6bd3fa2e5c5fe5
3.SendGridのリファレンス
https://sendgrid.kke.co.jp/docs/API_Reference/index.html

事前作業(SendGridの認証について)

「SendGirdのユーザ名とパスワードをどこかで指定するんだろうなぁ」
と思ってたのですが、不要でした。

SendGridのポータルサイトからAPIキーを発行してください。
発行したAPIキーが認証情報になります。

実装コード

  • Sample
Private Sub SendMail() 

    Dim objHTTP As Object
    Dim json As Variant

    json = "{""personalizations"":" _
              "[{""to"": [{""email"": ""[email protected]""}],""subject"": ""Mail Title""}]," _
              """from"": {""email"": ""[email protected]""}," _
              """content"": [{""type"": ""text/plain"",""value"": ""Mail Body""}]}"

    Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP.6.0")

    With objHTTP
        .Open "POST", "https://api.sendgrid.com/v3/mail/send", False
        .setRequestHeader "Content-Type", "application/json; charset=UTF-8"
        .setRequestHeader "Authorization", "Bearer xxxxYourApiKeyxxxxxxxxxxxxxx"
        .setProxy 2, "proxyhost.com:9293"
        .setProxyCredentials "proxyUser", "ProxyPassword"
        .setOption 2, 13056
        .send json

        If .ResponseText <> "" Then
            MsgBox .ResponseText
        Else
            MsgBox "OK"
        End If
    End With

End Sub
  • 流れ
    ・JSON形式でメール設定を定義(細かい内容はリファレンスの「V3 Mail Send API概要」参照)
    ・MSXML2.ServerXMLHTTP.6.0オブジェクトの生成
    ・POSTメソッドでSendGridのMail Send APIをオープン
    ・ヘッダ設定。Content-TypeにJsonの指定。
     AuthorizationヘッダにAPIキーをセット。Bearerの指定をお忘れなく。
    ・プロキシ設定。setOptionの記述はSSL認証に関するエラー回避。
    ・送信。エラーの際にはResponseTextにエラー内容が入っているはず。

  • 補足
    ・「xxxxYourApiKeyxxxxxxxxxxxxxx」がAPIキーです。
    ・プロキシを経由しない環境であれば「setProxy」、「setProxyCredentials」、「setOption」は省略してください。

VBAでのJSONファイルの取り扱い

JSONファイルをVBAでまじめに取り扱うのであれば「VBA-JSON」の利用なども検討してください。
⇒参考URL3の記事に詳しく記載されています。

所感

・VBAでのWebAPI利用なんてサッパリだ、の状態からなんとか実現できました。
・以外にVBA&REST APIの情報がネットに転がっていて助かった…

ツイッターでシェア
みんなに共有、忘れないようにメモ

ANA

日々勉強中です ( ..)φ

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント