(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Excel/VBA】Gmailを利用したメール送信プログラム

スポンサーリンク

はじめに

エクセルのVBA(マクロ)でGmailの送信機能を利用するプログラムです。
必要なのは送信元のGmailのユーザとパスワードのみでExcelのコードも単純なので容易に利用できますが、Googleアカウントのセキュリティレベルを下げた状態で動作させるので利用する際はご注意ください。

環境情報
  • Microsoft Visual Basic for Applications 7.1

事前準備

Gmail利用する送信元のユーザで以下にて「安全性の低いアプリの許可: 有効」を行う必要があります。

これは、Excelのマクロでのログインが単純なパスワード認証のためです。

一般的にこの手の自動発砲機能を利用するにはアクセストークンを取得したりするものが多いです。

VBAコード

以下のコードのmailXXXXに値をセットすればコピペで動作します。

Sub MailTest()
Dim mailUser As String
Dim mailPass As String
Dim mailSub As String
Dim mailBody As String
Dim mailTo As String
   
mailUser = "hoge@gmail.com"
mailPass = "hogehoge"
mailSub = "TestTitle"
mailBody = "TestBody"
mailTo = "huga@gmail.com"

Dim cdoMsg, cdoconf As Object
Dim strbody, kenmei, honbun, credit, tenpu As String
Dim cdoFlds As Variant

Set cdoMsg = CreateObject("CDO.Message")
Set cdoconf = CreateObject("CDO.Configuration")

cdoconf.Load -1

With cdoconf.Fields
    .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
    .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = "465"
    .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = True
    .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = mailUser
    .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = mailPass
    .Update
End With
    
cdoMsg.Fields.Item("urn:schemas:mailheader:X-Priority") = 1
cdoMsg.Fields.Update
    
With cdoMsg
    Set .Configuration = cdoconf
    .From = mailUser
    .To = mailTo
    .CC = ""
    .BCC = ""
    .MDNRequested = True
    .Subject = mailSub
    .TextBody = mailBody
    .send
    End With
End Sub

ただしパスワードが誤っていたり事前準備の許可を実施していないと以下のようなエラーとなります。

The message could not be sent to the SMTP server. The transport error code was 0x80040217. The server response was not available

Gmail側にもアラートが上がりますのでご注意ください。
f:id:mtiit:20200907122106j:plain

終わりに

GmailのSMTPサーバを接続先サーバとしていますが自前で用意したメールサーバでも似たような構文が利用できるので、WindowsServerやWindows端末にてメール自動送信をスクリプト化する際は有用です。

以上、ご参考になれば幸いです。