(Qrunch からの移管記事です)
タイトルの通り、EXCEL VBAからSendGridのWebAPI経由でメール送信をする方法を記載。
「WebAPIとか全然わからない」の状態から頑張って送信までできるようにしました。
普通はCDO.MessageでSendGridへSMTP通信すればいいだけですが、
ネットワーク構成の都合上「外部へのSMTP通信は不許可、HTTP/HTTPSはOK(ただし認証プロキシあり)」という環境化だったので、WebAPIを利用せざるをえませんでした。
⇒むしろSendGridにWebAPIがあってよかった。
同じような境遇の人がいたら参考にしてください。(いるか?)
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
「SendGirdのユーザ名とパスワードをどこかで指定するんだろうなぁ」
と思ってたのですが、不要でした。
SendGridのポータルサイトからAPIキーを発行してください。
発行したAPIキーが認証情報になります。
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」は省略してください。
JSONファイルをVBAでまじめに取り扱うのであれば「VBA-JSON」の利用なども検討してください。
⇒参考URL3の記事に詳しく記載されています。
・VBAでのWebAPI利用なんてサッパリだ、の状態からなんとか実現できました。
・以外にVBA&REST APIの情報がネットに転がっていて助かった…
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント