プロが教えるわが家の防犯対策術!

VBS初心者です。
以下のサイトを参考に,特定のフォルダにファイルが追加されたら,
指定のメールアドレスに添付して送信するVBSを作成してみました。

http://plaza.rakuten.co.jp/mscrtf/diary/20120626 …

ちなみに記述を少しだけ変えて,
送信したファイルを削除しないようにしています。
しかしこうしてしまうと,「送信フォルダ」にファイルが追加されると,
その新しく追加されたファイルではなく,
前から置いてある別のファイルが送信されてしまいます。
「最新のファイルを添付して送信」することはできないでしょうか?

またファイルを添付してメールを送信することはできるのですが,
なぜか送信受信ともに,まったくおなじメールが2通作成されてしまいます。
(2通同時ではなく1通目が届いて30秒後くらいにもう1通届きます)。

あと,受信側メールアドレスをbbb@hotmail.co.jpにし,
smtpserver:smtp.live.com
smtpserverport:587
とすると
「転送においてサーバーに接続できませんでした」と出てしまいます。
ポート番号を,465や25にしてみましたがだめでした。
どこを直せばいいでしょうか?

以上の解決策をご教授ください!

コードは以下です。

Dim Fs, strPath, Fl, F, NewFile, NewFileFP, OutF
Set Fs = CreateObject("Scripting.FileSystemObject")
strPath = "C:\FileSend\送信フォルダ\"
NewFile = ""
Set Fl = Fs.GetFolder(strPath)
For Each F In Fl.Files
If F.Name > NewFile Then
NewFile = F.Name
End If
Next
NewFileFP = Fl & "\" & NewFile
Dim WshShell, BtnCode
Set WshShell = WScript.CreateObject("WScript.Shell")
Set objShell = CreateObject("Wscript.Shell")
Set oMsg = CreateObject("CDO.Message")
oMsg.From = "ファイル送信元 <aaa@gmail.com>" '送信元
oMsg.To = "bbb@hotmail.co.jp" '送信先

oMsg.Subject = "ファイルの送信test3" '件名
oMsg.TextBody = "ファイルをお送りします。" 'メール本文
oMsg.AddAttachment NewFileFP '添付
oMsg.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/s … = 2
oMsg.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/s … = "smtp.googlemail.com"
oMsg.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/s … = 465
oMsg.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/s … = True
oMsg.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/s … = 1
oMsg.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/s … = "aaa@gmail.com"
oMsg.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/s … = "******"
oMsg.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/s … = 60
oMsg.Configuration.Fields.Update
oMsg.Send

oMsg.Configuration.Fields.Update
oMsg.Send
Set OutF = Fs.OpenTextFile("C:\FileSend\test.txt",8)
OutF.WriteLine "Date[" & date & "] Time[" & time & "] File[" & NewFile & "]"
OutF.Close

objShell.Popup "メール送信しました。", 0, "送信完了", 0
Set Fs = Nothing
Set Fl = Nothing
Set OutF = Nothing

使用しているパソコンは
Win7Professional 32bit
です。

よろしくお願いいたします!

A 回答 (1件)

 簡単なところから回答いたします。



> なぜか送信受信ともに,まったくおなじメールが2通作成されてしまいます。
 これは、
oMsg.Configuration.Fields.Update
oMsg.Send
がダブっているからです。

 参考にされた サイト にも2回は書いてありません。

 コーディング をされる際に、誤ってコピペでもされたのでしょうが、メール送信スクリプト などを書かれるときには、細心の注意が必要です。

●CDO.Messageによるメール送信
http://serialty.blog117.fc2.com/blog-entry-10.html
のように、[With ステートメント] を使ったり、長い文字列を
strConfigurationField ="http://schemas.microsoft.com/cdo/configuration/"
というように、定数に代入したりして、コード の可読性を高める工夫をされることをお薦めします。

--------------------------------------------------

>「最新のファイルを添付して送信」することはできないでしょうか?
 お示しの コード で添付ファイルを決定しているのは、
  For Each F In Fl.Files
    If F.Name > NewFile Then
      NewFile = F.Name
    End If
  Next
の部分ですが、これは、strPath フォルダ 内の ファイルを、名前順に巡回(For ~ Next ループ)して、最後の ファイル を NewFile に代入しています。
 従いまして、NewFile に代入されるのは、「前から置いてある別のファイル」ではなくて、名前の昇順に並べた場合の最後の ファイル ということになります。


 「最新のファイル」を特定するためには、strPath フォルダ 内の ファイル の更新日時や作成日時を検証して、最も新しいものを NewFile に代入するということになりますが、手っ取り早いのは、
oMsg.Send
した後で、添付ファイル を別の フォルダ(例えば「送信フォルダ」の下に「送信済み」フォルダ でも作っておいて、そこ)に移動するのが良いかと存じます。

--------------------------------------------------

> どこを直せばいいでしょうか?
 私は hotmail 環境がありませんので、試しようがありませんが、WEB でいろいろと検索してみますと、
・CreateObject("CDO.Message") は万能ではない。
・スパム防止策で Microsoft ができないようにしている。
というような意見が見受けられます。

 一方、
●[Template] Send SMTP email with Visual Basic Script (vbs) from Command Prompt using CDO([テンプレート] CDOを使用して、コマンドプロンプトからVisual Basicスクリプト(VBS)でSMTP電子メールを送信)
http://www.unix.com/windows-dos-issues-discussio …
には、live.com からでも メール が送れる スクリプト というような感じで書かれていますので、こちらをご参考になさってみてください。


 ただし、ウィキペディア(http://ja.wikipedia.org/wiki/Hotmail)には、
> Hotmail(ホットメール)は、MSNが提供していた(過去形)Webメールサービスである。
と書かれており、Microsoft としても仕様の変更を頻繁に行なっているようですので、何とも申せませんねぇ。。。
    • good
    • 1
この回答へのお礼

すごく丁寧に教えていただき大変感謝しています!

>oMsg.Configuration.Fields.Update
>oMsg.Send
>がダブっているからです。

確認ミスから単純な質問をしてしまい申し訳ありませんでした。

添付ファイルの選別については,
日付等の検証から新しいものを・・・は難しそうだったので,とりあえず
教えていただいたように,
別の新しいフォルダを作成し,そこにコピーしてから送信,という方法を採りました。

Hotmailでうまく動作しないのはMicrosoft側の問題もあるようなのですね。
社内で調整していきたいと思います。

教えていただいたように修正したところうまく動作して大変うれしいです!
本当にありがとうございました!!

お礼日時:2014/04/04 11:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!