2012-01-27 39 views
23

Sono in esecuzione Windows 2003 Service Pack 2. Ho un file batch che viene eseguito su richiesta. Voglio ricevere un'e-mail ogni volta che viene eseguito il file batch. L'email è semplice, solo una frase che indica che il file batch è stato eseguito; è sempre lo stessoCome inviare una semplice email da un file batch di Windows?

Ho provato un paio di cose per fare questo. Ho pensato a telnet, ma non riesco a capire come reindirizzare un insieme di comandi in telnet; I file batch di Windows non hanno uno "stile documento" in stile Unix e chiamano "telnet <scriptfile" dove file di script contiene i comandi per inviare un messaggio di posta elettronica non funzionante. Ho anche trovato un paio di soluzioni su Internet usando CDO.Message, ma non l'ho mai usato prima e ho continuato a ricevere messaggi di errore che non capisco.

Come posso inviare una semplice email da un file batch di Windows?

+0

[Questo] (http://www.msexchange.org/articles/sending-email-without-client.html) potrebbe essere d'aiuto. Spiega come farlo dalla riga di comando o usando telnet – vaichidrewar

+0

Non c'è alcuna directory \ Inetpub \ mailroot \ pickup, quindi il metodo di prelievo non funziona. Non sono autorizzato ad installare alcun software sulla macchina, quindi il metodo blat non funziona. Non voglio farlo manualmente, quindi il metodo telnet non funziona. E non ho ASP, quindi quel metodo non funziona. Altre idee? – user448810

+0

possibile duplicato di [invio di posta dal file batch] (http://stackoverflow.com/questions/709635/sending-mail-from-batch-file) –

risposta

14

Max è sulla giusta strada con il suggerimento di utilizzare Windows Scripting per un modo per farlo senza installare alcun eseguibile aggiuntivo sulla macchina.Il suo codice funzionerà se si dispone della configurazione del servizio SMTP IIS per inoltrare i messaggi di posta elettronica in uscita utilizzando l'impostazione "SmartHost" o se la macchina esegue anche Microsoft Exchange. Altrimenti, se questo non è configurato, troverete le vostre e-mail che si accumulano nella cartella della coda dei messaggi (\ inetpub \ mailroot \ queue). Pertanto, a meno che non sia possibile configurare questo servizio, si desidera anche specificare il server di posta elettronica che si desidera utilizzare per inviare il messaggio. Per fare questo, si può fare qualcosa di simile nel file script di 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

Questo funziona. Grazie! E grazie a tutti gli altri che hanno risposto. – user448810

12

Ho usato Blat (http://www.blat.net/) per molti anni. È una semplice utility da riga di comando che può inviare e-mail dalla riga di comando. È gratuito e opensource.

È possibile utilizzare il comando come "Blat myfile.txt -per [email protected] -server smtp.domain.com -port 6000"

Ecco qualche altro software si può provare a inviare e-mail da riga di comando (non li ho mai usato):
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

Qui (http://www.petri.co.il/send_mail_from_script.htm) si possono trovare altri modo diverso di se nding e-mail da uno script VBS, oltre a link per alcuni dei software menzionati

Il seguente codice VBScript è preso da quella pagina

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 

Salvare il file come 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 

Salva il file come qualcosa2.vbs

Penso che questi script VBS utilizzino il server di posta predefinito di Windows, se presente. Non ho provato questi script ...

+0

Sospetto che non mi sarà permesso di mettere il software opensource sul server in questione. Ci proverò. Avete altri suggerimenti? – user448810

+1

Grazie mille! Questo ha funzionato a meraviglia! @ user448810 controllalo e compilalo tu stesso se l'integrità del software è in questione. Non richiede installazione in quanto tale, basta lanciarla sul tuo percorso e usarla quando ne hai bisogno. – Impulss

+0

O anche solo mettere il blat.exe nella stessa directory del tuo script ... –

0

Se non riesci a seguire il suggerimento di Max di installare Blat (o qualsiasi altra utilità) sul tuo server, allora forse il tuo server ha già installato un software che può inviare e-mail.

So che sia Oracle che SqlServer hanno la capacità di inviare e-mail. Potrebbe essere necessario lavorare con il tuo DBA per ottenere quella funzionalità abilitata e/o ottenere il privilegio di usarla. Naturalmente posso vedere come questo possa presentare il suo insieme di problemi e la burocrazia. Supponendo di poter accedere alla funzione, è abbastanza semplice avere un accesso batch a un database e inviare posta.

Un file batch può facilmente eseguire un VBScript tramite CSCRIPT. Una rapida ricerca su google trova molti link che mostrano come inviare email con VBScript. Il primo che ho visto è stato http://www.activexperts.com/activmonitor/windowsmanagement/adminscripts/enterprise/mail/. Sembra semplice.

+0

SqlServer è installato sulla macchina. Vedrò questa opzione. Grazie. Nel frattempo, altri suggerimenti saranno ancora accettati con gratitudine. – user448810

+0

@ user448810 - Sì, ho aggiunto VBScript alla mia risposta. Potrebbe essere fatto anche con JavaScript. – dbenham

1

Se PowerShell è disponibile, il Send-MailMessage commandlet è un singolo comando di una sola riga che potrebbe facilmente essere chiamato da un file batch per gestire le notifiche e-mail. Di seguito è riportato un esempio della riga da includere nel file batch per chiamare lo script PowerShell (la variabile %xVariable% può essere passata dal file batch allo script PowerShell):

- [BATCH FILE] -

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

di seguito è riportato un esempio di quello che si potrebbe includere nello script PowerShell (è necessario includere la linea PARAM come la prima linea non-osservazione nello script se hai incluso passando il %xVariable% dal file batch:

- [POWERSHELL SCRIPT] -

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

Facilmente leggibile e funziona alla grande. Nel caso di messaggi di testo semplice (senza argomento '-BodyAsHtml') newline è denotato da' \ 'n' o' \ 'r \' n'. – miroxlav

Problemi correlati