2015年3月17日火曜日

Windowsのコマンド実行でメール送信(WSH)

こんにちは。近藤です。





サーバやクライアントPCで行っている何かしらの処理の結果をメールで送信したい、ということはよくあると思います。たとえば、夜間バッチの結果を自分宛にメールで送ったり、処理を行うことで生成されるファイルを、そのファイル内容にあわせて相手先に送信したり…など。

今回は、Windowsのコマンド実行でメールを送信する方法です。
SMAILやBASP21のようなコンポーネントを環境に導入して、それを使用してメールを送信する方法もありますが、今回はWindows OS標準の機能だけで行う方法です。

やり方:

WSHでCDO.Messageを使ってメール送信スクリプトを作成し、それをバッチで起動します。


  1. 以下のスクリプトファイルを作成します(例えば、「mail.vbs」)。
    SMTP認証、Cc、Bcc、Reply、添付ファイルなどのうち、不要なものは消すかコメントアウトしてください。

    '****************************************************************
    'メール送信元の設定
    '****************************************************************

    strFrom = "<送信元メールアドレス>"
    strReply = “<返信メールアドレス>”

    strServer = "<smtpサーバのアドレス>"
    nPort = <smtpサーバのポート番号>
    strUser = "<smtpサーバのユーザ>"
    strPass = "<smtpサーバのパスワード>"


    '****************************************************************
    'メール送信先の設定&メール本体の作成
    '****************************************************************

    strTo = "<送信先メールアドレス>"
    strCc = "<cc先メールアドレス>"
    strBcc = "<bcc先メールアドレス>"

    strSubject = "<メールタイトル>"
    strTextbody = "<メール本文>"

    strAddAttachment = “<添付ファイルのフルパス>”


    '****************************************************************
    ' メール送信
    '****************************************************************

    Set Cdo = WScript.CreateObject("CDO.Message")

    Cdo.From = strFrom
    Cdo.ReplyTo = strReply
    Cdo.To = strTo
    Cdo.Cc = strCc
    Cdo.Bcc = "strBcc
    Cdo.Subject = strSubject
    Cdo.Textbody = strTextbody
    Cdo.AddAttachment strAddAttachment

    Cdo.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    Cdo.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strServer
    Cdo.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = nPort
    Cdo.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30
    Cdo.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = true
    Cdo.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = true
    Cdo.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = strUser
    Cdo.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = strPass

    Cdo.Configuration.Fields.Update

    on error resume next
    Cdo.Send
    on error goto 0


    '****************************************************************
    ' 終了
    '****************************************************************

    Wscript.Quit(Err.Number)

  2. 1.で作成した「mail.vbs」を、コマンドプロンプトから実行します。

    cscript mail.vbs

  3. メールが送信されます。
これを使えば、たとえばGmailのSMTPサーバからメールを送信する、ということができます(Gmail側でアクセスの設定が必要です)。
SMAILやBASP21のようなコンポーネントを環境に導入すれば、もっとリッチなことができるのですが、そこまで必要が無ければ、このようなスクリプトだけでメールを送ることができます。
また、WSHで作成されているファイルなので、「mail.vbs」を引数渡しできるように変更して、メールの送信先や夜間バッチの結果などを引数で渡したり、メール本文をファイルで渡したりすることもできますね。


0 件のコメント:

コメントを投稿