はじめに
エクセルの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側にもアラートが上がりますのでご注意ください。
終わりに
GmailのSMTPサーバを接続先サーバとしていますが自前で用意したメールサーバでも似たような構文が利用できるので、WindowsServerやWindows端末にてメール自動送信をスクリプト化する際は有用です。
以上、ご参考になれば幸いです。