30代半ばの事務職員がITエンジニアになった話

おおよそタイトルのとおり、30代半ばにしてITエンジニアのタマゴになってしまった会社員の話

【VBS】特定のフォルダにファイルが作成されたら自動的にメールに添付して送りたい

最近、ここに投稿するネタがないなぁ
とか思ってたわけですが、


ここのところもっぱら
つまらない資料作成と、
くだらない社内調整と、
意味のない打ち合わせに
終始していたから。


たとえ忙しかったとしても
アウトプットするものが
ないってことは
やはり無駄な時間を過ごしていた
と切に感じるのでありました。



で、久々にお題がでたわけで
(こういうのを待ってた)

サーバー内の特定のフォルダにファイルが自動作成されるので作成次第、メールで送りたい


環境はWindows Server
さて、どうするか。


タスクスケジューラを使うのは確定として
トリガーは?

ファイルが作成されたことをログからとる?

Windowsのシステムに関するログは
どこかにはあるんだろうけど、、
ハードルが高そうなので却下。


あとタスクスケジューラからの
メールも可能だけど
添付ファイルはつけられないっぽい
のでこちらも却下。


結局、

VBSでコードを書いて毎日実行


作成日付が当日のファイルがあれば
メールに添付して送付という
条件分岐をVBで書いて
VBSファイルにして保存
タスクスケジューラから毎日実行

'変数の宣言
Dim objFileSys
Dim objFolder
Dim objFile
Dim today
Dim AttachFlag

'メールを扱うオブジェクトを作成
Set objMail = CreateObject("CDO.Message")
'ファイルシステムを扱うオブジェクトを作成
Set objFileSys = CreateObject("Scripting.FileSystemObject")
'フォルダを設定
Set objFolder = objFileSys.GetFolder("C:\xxx\test")
'当日日付の取得
today = Left(Now(),10)
'添付フラグ
AttachFlag = 0

'送信元
objMail.From = "xxx@xxx.co.jp"
'宛先
objMail.To = "xxx@xxx.co.jp"
'CC
objMail.Cc = "xxx@xxx.co.jp"
'FolderオブジェクトのFilesプロパティからFileオブジェクトを取得
For Each objFile In objFolder.Files
  '取得したファイルの作成日が本日ならをファイルを添付およびフラグON
  If Left(objFile.DateCreated,10) = today Then
    objMail.AddAttachment objFolder & "\" & objFile.Name
  AttachFlag = 1
  End If
Next
objMail.Subject = "件名"
objMail.TextBody = "本文"

'送信方法
objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
'SMTPサーバ
objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "192.168.x.x"
'SMTPポート
objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
'SSL通信をしない
objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False
'SMTP認証
'objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
'SMTP送信ユーザ名 指定なし
'objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "xxx@xxx.com"
'SMTP送信ユーザパスワード 指定なし
'objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "xxx"
'タイムアウト 指定なし
'objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30
'更新、必要な処理らしい
objMail.Configuration.Fields.Update
'添付ファイルがあればメールを送信
If AttachFlag = 1 Then
  objMail.Send
End If
'変数をリセット
Set objMail = Nothing
Set objFileSys = Nothing