VBScriptでメール送信する

2020年11月12日

スポンサーリンク

前説

ず~とUnix/Linuxの世界で生きてきた筆者は、最近、初めて、windowsサーバーの仕事を担当しました!しかも、いきなりバッチです。
仕事の内容を簡単に説明しますと、夜間バッチでDB側に用意したストアドプロシージャを呼び出しやログファイルの圧縮して外部ストレージに保管するというどのプロジェクトにおいても必ずあるバッチ機能です。
あれ?なんかおかしい、それ、メール送信と何も関係ねえよ。そうなんです、確かに関係ないと思いますが、運用管理上、バッチが正常に働いたのかを毎日に確認しなければならないため、バッチを起動する時、終了する時に、運用管理者にメール通知するという付帯機能も必要となります。
今回はここでVBScriptでメール送信する機能の実現方法を紹介します。(JP1やSystemWalkerを使うならVBScriptでメール送信することは論外ですね。興味のある方はJP1とSystemWalkerをお調べてください)

VBScriptでメール送信する機能をどうやって実現する

考え方は二つあると思います。
一つ目はWindowsに標準で搭載されるCDO(Collaboration Data Objects)を利用してVBScriptでメール送信すること。
メリット:Windowsに標準で搭載されるので、第三者ソフトウェアの導入、構築手順書作成は不要、お客様の環境でソフトウェアの導入が制限され、また導入不可の場合、これは唯一の選択肢だと思います。
デメリット:あんまりないと思いますが、あるとしたら、第三者ソフトウェアの利用より実装が少し面倒です。
二つ目は第三者ソフトウェアを利用してVBScriptでメール送信すること。
メリット:実装は簡単、いろいろ便利な機能が付いています。
デメリット:第三者ソフトウェアの導入、構築手順書作成が必要となります。また、お客様の環境で他のソフトウェアと競合で予想外のトラブルが発生した場合があります。(ごくレアですが、もしあれば大変なことになります)
第三者ソフトウェアなら、BASP21という昔から存在していたコンポーネントがあります。それ以外にもたくさんあるはずと思います。興味のある方はBASP21などをお調べてください。
今回は、Windowsに標準で搭載されるCDO)を利用してVBScriptでメール送信する機能の実現方法を紹介すると考えてます。

基本的な実装方法

基本的なメール送信と言えば、差出人(From)、宛先(To)、件名(Subject)、内容(Body)四つの部分で構成するのでしょう。
それではさっそく基本的な実装方法を紹介します。

簡単ですね。
10行目:

を注目したいと思います。

sendusingの設定値が、下記の説明通りで、汎用的な実装方法なら、「2」のほうが無難でしょう。
1:ローカルSMTPサービスを使ってメール送信
2:外部のSMTPサービスを使ってメール送信
3:OLE DBを利用してローカルのExchangeに接続する
もう一点ですが、objMail.Configuration.Fields.Updateを書かない(設定値を更新しない)と、実行時に一発で怒られること。これは固定な書き方として覚えれば良いかと思います。

また、注意したいのは、上記のソースを実行すると、メール内容が文字化けします。下記の一行を入れると、解決できると思います。

(筆者の場合、vbsファイルの文字コードをshift_jisに設定しない限りに、上記を入れても文字化けてました。)

ここまでは、VBScriptでメール送信する機能の基本的な実装方法を紹介しました。これから、Q&Aというカタチで少し深く掘っていきましょう。

CC、BCCの場合、VBScriptでメール送信する機能をどうやって実現する

これは簡単です。下記のように、Cc、Bccに対象メールアドレスを設定すればと思います。

複数宛先の場合、VBScriptでメール送信する機能をどうやって実現する

現実の世界でよくあるケースですね。グループアドレスで纏めて送信することが一般的なやり方ですが、プログラム世界と同じ、例外な奴必ずいる!しかも、CCを使わない、たいていお偉いさんですね。このような場合、カンマ区切りでメールアドレスを設定すればと思います。

内容を改行したい場合、VBScriptでメール送信する機能をどうやって実現する

これは当たり前のことですね。vbcrlfという定数を使えばと思います。

添付ファイルの場合、VBScriptでメール送信する機能をどうやって実現する

チョット敷居が高い、上級レベルのイメージと思いますが、実際の実装は物凄く簡単です。下記の一行を入れれば、解決できると思います。複数添付ファイルの場合は?その分を足せば!

もっと、VBScriptでメール送信する機能の実装方法があるのか

あります。これまでVBScriptでメール送信する機能の実装方法を紹介しましたが、あくまで、サンプル実装方法ですので、教科書にしか存在しないと思います。
実際のプログラム世界では、
1.メールアドレスやSMTPサービスのIPアドレスなどの設定値は実装の中に入れると、後日に変更したい場合、実装の改修となり、運用上にカバーできなくなるため、設定値の外だしが必要となります。
2.一般的に、メール送信機能は複数場所に使われるため、関数化、共通化する必要があります。
そのため、今回はサンプルだけを提供し、今後、別途で実際のプログラム実装を紹介したいと思います。

まとめ

今回は、VBScriptでメール送信する機能のサンプル実装方法を紹介しました。いかがでしょうか。簡単ですね。前述のように、今後、実際のプログラム世界の実装方法を紹介したいと思います。またよろしくお願いします。
それでは!
以上です。

スポンサーリンク