バッチの実行結果やエラー発生時など、メールで通知が出せると便利ですね。
そんな訳で、ソフトのインストールも不要でメール送信が出来るCDOの技術を使用したメール送信のサンプルプログラムを紹介します。
尚、この技術自体は古く、例えば「TLS/STARTTLS」に対応していません。よって、レンタルサーバのメールサーバ機能などを使用している環境では、TLS/STARTTLSが必須のケースもあり、そういうメールサーバ相手だとCDOは使えません。
なので、CDOが活用できる環境としては、古いメールサーバを自社で構築して運用している企業とかでしょうか・・・。
まぁCDOでメール送信が出来る環境であれば、追加インストール無く使用出来るので便利だと思います。
Call MailSend("テストメールです。") Sub MailSend(strMessage) Dim objMail Set objMail = CreateObject("CDO.Message") '送信元メールアドレス objMail.From = "aaaa@mail.depthbomb.net" '送信先メールアドレス※送信アドレスが複数の場合はセミコロンで区切る objMail.To = "bbb@mail.depthbomb.net;ccc@mail.depthbomb.net" '件名 objMail.Subject = "メール送信サンプル件名" 'メール文面 objMail.TextBody = strMessage '2020/01 以下の行を追加 objMail.TextBodyPart.Charset = "ISO-2022-JP" '2019/02 以下の行を追加 objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 'ここは通常2で良い objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 'メールサーバのホスト名やIPアドレス objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "201.xxx.xxx.xxx" '送信用ポート番号 objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 'メールサーバの認証用ユーザー objMail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = "aaa" 'メールサーバのユーザーパスワード objMail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "123456" objMail.Configuration.Fields.Update objMail.Send Set objMail = Nothing End Sub
Subプロシージャとして作っておき、必要によって引数に本文の文面を渡して呼び出してあげる感じ使うのが良いかと思います。
是非活用してください。
※2019/02 18行目20行目を追加しました。実はこの行が記述されていないと、インターネットを介したメールは飛びません。自身が業務でバッチに組み込む場合は宛先が同じ社内のメールアドレスを向けていた為、VPNで繋がっていたメールサーバからインターネットを経由せずに普通にメールが届いていましたが、インターネットを介す場合はこの行が無いとだめですね。うっかり・・・
ずっと加筆しようと思いつつ忘れていました・・・。
※2020/01 更に加筆。17行目を追加しました。この一文が無いと、メールを受けとるメーラーによってはメール本文が文字化けします。