1. ホーム
  2. ブログ
  3. データ活用
  4. データ連携と統合を科学するブログ
  5. Windowsのコマンド実行でメール送信(WSH)

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」を引数渡しできるように変更して、メールの送信先や夜間バッチの結果などを引数で渡したり、メール本文をファイルで渡したりすることもできますね。