2012-01-27 102 views
23

我正在運行Windows 2003 Service Pack 2.我有一個按需運行的批處理文件。每次批處理文件運行時,我都希望發送一封電子郵件。電子郵件很簡單,只是一個表明批處理文件運行的句子;每次都是一樣的。如何從Windows批處理文件發送簡單電子郵件?

我已經嘗試了幾件事情來完成這件事。我想到了telnet,但我無法弄清楚如何將一組命令重定向到telnet; Windows批處理文件沒有Unix風格的「here文檔」,並調用"telnet <scriptfile",其中scriptfile包含用於發送電子郵件的命令不起作用。我還使用CDO.Message在互聯網上找到了一些解決方案,但是我之前從未使用過這些解決方案,並且不斷收到我不明白的錯誤消息。

如何從Windows批處理文件發送簡單的電子郵件?

+0

[這](http://www.msexchange.org/articles/sending-email-without-client.html)可能的幫助。它說明了如何通過命令行或使用telnet做 – vaichidrewar 2012-01-27 19:34:54

+0

沒有目錄\的Inetpub \ mailroot \皮卡,所以攝取方法不起作用。我沒有被允許在機器上安裝任何軟件,所以blat方法不起作用。我不想手動執行此操作,所以telnet方法不起作用。而我沒有ASP,所以這種方法不起作用。任何其他想法? [從批處理文件發送郵件]的 – user448810 2012-01-27 19:46:44

+0

可能重複(http://stackoverflow.com/questions/709635/sending-mail-from-batch-file) – 2015-08-18 17:00:47

回答

14

Max在正確的軌道上建議使用Windows Scripting來實現此目的,而無需在計算機上安裝任何其他可執行文件。如果您使用「智能主機」設置將IIS SMTP服務設置爲轉發出站電子郵件,或者該計算機恰好運行Microsoft Exchange,則他的代碼將可以正常工作。否則,如果沒有配置,你會發現你的郵件堆積在郵件隊列文件夾(\ inetpub \ mailroot \ queue)中。因此,除非您可以配置此服務,否則您還希望能夠指定要用於發送消息的電子郵件服務器。要做到這一點,你可以做這樣的事情在你的Windows腳本文件:

Set objMail = CreateObject("CDO.Message") 
Set objConf = CreateObject("CDO.Configuration") 
Set objFlds = objConf.Fields 
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 'cdoSendUsingPort 
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.your-site-url.com" 'your smtp server domain or IP address goes here 
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 'default port for email 
'uncomment next three lines if you need to use SMTP Authorization 
'objFlds.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "your-username" 
'objFlds.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "your-password" 
'objFlds.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 'cdoBasic 
objFlds.Update 
objMail.Configuration = objConf 
objMail.FromName = "Your Name" 
objMail.From = "[email protected]" 
objMail.To = "[email protected]" 
objMail.Subject = "Email Subject Text" 
objMail.TextBody = "The message of the email..." 
objMail.Send 
Set objFlds = Nothing 
Set objConf = Nothing 
Set objMail = Nothing 
+0

這有效。謝謝!並感謝所有迴應的人。 – user448810 2012-01-27 21:01:02

12

我已經使用了Blat(http://www.blat.net/)多年。 這是一個簡單的命令行工具,可以從命令行發送電子郵件。 它是免費的,並開放源碼。

可以使用命令,如「BLAT myfile.txt的-to [email protected] -server smtp.domain.com -port 6000」

下面是一些其他的軟件,你可以嘗試從命令行發送電子郵件(我從來沒有使用過):
http://caspian.dotconf.net/menu/Software/SendEmail/
http://www.petri.co.il/sendmail.htm
http://www.petri.co.il/software/mailsend105.zip
http://retired.beyondlogic.org/solutions/cmdlinemail/cmdlinemail.htm

這裏(http://www.petri.co.il/send_mail_from_script.htm),你可以找到其他自身各種方式nding從VBS腳本的電子郵件,再加上鍊接所提到的一些軟件

的下面的VBScript代碼是從頁

Set objEmail = CreateObject("CDO.Message") 
objEmail.From = "[email protected]" 
objEmail.To = "[email protected]" 
objEmail.Subject = "Server is down!" 
objEmail.Textbody = "Server100 is no longer accessible over the network." 
objEmail.Send 

另存爲something.vbs

Set Msg = CreateObject("CDO.Message") 

With Msg 

.To = "[email protected]" 
.From = "[email protected]" 
.Subject = "Hello" 
.TextBody = "Just wanted to say hi." 
.Send 

End With 

保存文件拍攝該文件作爲something2.vbs

我認爲這些VBS腳本使用Windows默認郵件服務器,如果存在。 我沒有測試這些腳本...

+0

我懷疑我會不會被允許把開源軟件的服務器上有問題。我會盡力。你有什麼其他的建議? – user448810 2012-01-27 19:50:39

+1

非常感謝!這工作得很好! @ user448810如果軟件的完整性存在問題,請自行檢查並編譯它。它不需要安裝,只需將其放入路徑中並在需要時使用它。 – Impulss 2013-02-13 06:46:20

+0

甚至只是將blat.exe放在與腳本相同的目錄中... – 2015-01-15 04:55:03

0

如果你不能按照你的服務器上安裝BLAT(或任何其他實用程序)的最大的建議,那麼也許您的服務器已經安裝的軟件,可以發送電子郵件。

我知道Oracle和SqlServer都有能力發送電子郵件。您可能必須與您的DBA合作才能啓用該功能並/或獲得使用該功能的權限。當然,我可以看到這可能會帶來一系列問題和繁文red節。假設您可以訪問該功能,那麼將批處理文件登錄到數據庫併發送郵件相當簡單。

批處理文件可以通過CSCRIPT輕鬆運行VBScript。快速谷歌搜索找到許多鏈接,顯示如何使用VBScript發送電子郵件。我碰巧看到的第一個是http://www.activexperts.com/activmonitor/windowsmanagement/adminscripts/enterprise/mail/。它看起來很直接。

+0

SqlServer安裝在機器上。我會看看這個選項。謝謝。同時,其他建議仍將受到感謝。 – user448810 2012-01-27 20:19:56

+0

@ user448810 - 是的,我添加了VBScript到我的答案。它也可以用JavaScript來完成。 – dbenham 2012-01-27 20:26:06

1

如果PowerShell是可用,Send-MailMessage命令行是一個單行命令,可以很容易地從一個批處理文件調用處理郵件通知。以下是您要在批處理文件中包含的用於調用PowerShell腳本的行的示例(%xVariable%是您可能想要從批處理文件傳遞到PowerShell腳本的變量):

- [BATCH FILE] -

:: ...your code here... 
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -windowstyle hidden -command C:\MyScripts\EmailScript.ps1 %xVariable% 

以下是你可能會在您的PowerShell腳本示例(您必須包括PARAM線在你的腳本,如果你提供從批處理文件傳遞%xVariable%的第一個非目標行:

- [PowerShell腳本] -

Param([String]$xVariable) 
# ...your code here... 
$smtp = "smtp.[emaildomain].com" 
$to = "[Send to email address]" 
$from = "[From email address]" 
$subject = "[Subject]" 
$body = "[Text you want to include----the <br> is a line feed: <br> <br>]"  
$body += "[This could be a second line of text]" + "<br> " 

$attachment="[file name if you would like to include an attachment]" 
send-MailMessage -SmtpServer $smtp -To $to -From $from -Subject $subject -Body $body -BodyAsHtml -Attachment $attachment -Priority high 
+0

易於閱讀,效果很好。在純文本消息的情況下(不帶參數'-BodyAsHtml')換行符由'\'n'或'\'r \'n'表示。 – miroxlav 2017-10-31 15:58:34