SQLの窓 イラストAC フリー素材

2013年07月31日

Windows 標準の CDO.Message で(GmailまたはYahoo!メールを使って)簡単にバッチ処理からメールを送る

SSL/465 で暗号化通信をします。
Gmail は、smtp.gmail.com
Yahoo メールは smtp.mail.yahoo.co.jp  ( アカウントは @ の前の部分 )
ファイルを添付する場合は、55行目の下に
Call Cdo.AddAttachment( "ファイルのフルパス" )
と追加します
HTML メールも送りたい場合は、
Cdo.HTMLBody = "HTMLの記述"
です
CC と BCC は、カンマで区切られた複数のアドレスを設定します
Cdo.CC  = """User 1"" , ""User 2"" "
関連する記事 VS2010(C#) : TKMP.DLL(3.1.2)を使った、メール送信テンプレート ▼ 2013-01-06 の記述( 但し、ソースコードは最新にしました ) 一時期 Windows で動かない事ががあったのですが、Windows7 の後継 OS も出たので久しぶりに使ってみたら普通に動きました。この記事の後半にあるダウンロードとソースコードは昔のものですが、動作するのでそのままおいて置きますが、今回新たにテストしたのはメールを送る機能に特化したスクリプトです。 このオブジェクトでは、パスワードの暗号化ができないので個人のメールアドレスでは無く、バッチ処理の結果ログを送る為のメールアドレスを作って運用するのが良い使い方です。 通信全体を暗号化できます ただ、Windows として過去の経緯からして必ず動くと保証できないので、basp21 や他の方法も視野にいれておくといいと思います。他の方法の一つとして、面倒ではありますが、PC に フリーのメールサーバーをインストールして、ユーザーとパスワードのいらない環境で PHP の mb_send_mail を使う方法があります。(過去記事 : PMail Server フリー版 をアプリケーションテスト用に設定 : 2009年6月の記事 ) バッチファイル
@echo off

cscript //Nologo mail.vbs "ここは 題名" "ここは 本文\nです。\n簡単なメッセージを送ります"
VBScript : mail.vbs
' ****************************************************
' 【 対象 : Windows XP 以降 】
' Ping を実行して応答が返って来たら、
' 指定アドレスにメールを送ります
'
' HTML メールは Cdo.Htmlbody を使用します
' "<PRE>" & strBody & "</PRE>" をセットすると
' 良いでしょう )
'
' 添付ファイルは 
' Cdo.AddAttachment( "添付ファイルへのパス" ) を実行します
' ****************************************************
strTarget = "192.168.1.1"

strFrom = "username@gmail.com"
strTo = "宛先"

strServer = "smtp.gmail.com"
nPort = 465
strUser = "username@gmail.com"
strPass = "パスワード"

' ****************************************************
' WMI による PING 処理
' 最大4回リトライ(正常なら1回)
' ****************************************************
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
bReply = false
For I = 1 to 4
	Set colItems = objWMIService.ExecQuery _
		("Select * from Win32_PingStatus " & _
			"Where Address = '" & strTarget & "'")
	For Each objItem in colItems
		if objItem.StatusCode = 0 then 
			bReply = true
			I = 4
			Exit For
		end if
	Next
Next

if bReply then
	strSubject	= strTarget & " は稼動中です"
	strBody = "よろしくお願いします"
else
	strSubject	= strTarget & " は問題があります"
	strBody = "調査をお願いします"
end if

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

Cdo.From = strFrom
Cdo.To = strTo
Cdo.Subject	= strSubject
Cdo.Textbody = strBody

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/smtpusessl") = true

Cdo.Configuration.Fields.Item _
 ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
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
if Err.Number <> 0 then
	strMessage = Err.Description
else
	strMessage = "送信が完了しました"
end if
on error goto 0

Wscript.Echo strMessage

ここから古い記事の部分



Windows XP 以降で実行可能です。
( Ping 部分 )
※ Mail 送信部分は Windows 2000 以降です。
' ****************************************************
' 【 対象 : Windows XP 以降 】
' Ping を実行して応答が返って来たら、
' 指定アドレスにメールを送ります
'
' HTML メールは Cdo.Htmlbody を使用します
'
' 添付ファイルは 
' Cdo.AddAttachment( "添付ファイルへのパス" ) を実行します
' ****************************************************
strTarget = "192.168.1.1"

strFrom = "xxxx@xxxxxxxxxx"
strTo = "yyyy@yyyyyyyyy"

strServer = "zzzzzzzzzzzzzz"
nPort = 587
strUser = "aaaa"
strPass = "????"

' ****************************************************
' WMI による PING 処理
' 最大4回リトライ(正常なら1回)
' ****************************************************
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
bReply = false
For I = 1 to 4
	Set colItems = objWMIService.ExecQuery _
		("Select * from Win32_PingStatus " & _
			"Where Address = '" & strTarget & "'")
	For Each objItem in colItems
		if objItem.StatusCode = 0 then 
			bReply = true
			I = 4
			Exit For
		end if
	Next
Next

if bReply then
	strSubject	= strTarget & " は稼動中です"
	strBody = "よろしくお願いします"
else
	strSubject	= strTarget & " は問題があります"
	strBody = "調査をお願いします"
end if

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

Cdo.From = strFrom
Cdo.To = strTo
Cdo.Subject	= strSubject
Cdo.Textbody = strBody

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/smtpauthenticate") = 1
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
if Err.Number <> 0 then
	strMessage = Err.Description
else
	strMessage = "送信が完了しました"
end if
on error goto 0

Wscript.Echo strMessage
関連する Microsoft ドキュメント

CdoSendUsing Enum

関連する記事

IE拡張メニューで取得したテキストをメールで送る(CDO.Message版)

更新履歴
初回投稿 : 不明
2013-01-06 : 部分変更
2013-07-26 : Gmail をベースにして、SSL/465 で暗号化処理
2013-07-31 : Yahoo でテストして、添付ファイル、HTMLメール、CC、BCC の使い方を追加


【VBScriptの最新記事】
posted by at 2013-07-31 15:58 | VBScript | このブログの読者になる | 更新情報をチェックする


Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX