2009-04-02 7 views
43

Abbiamo uno script per il backup dei file. Una volta terminata l'operazione di backup, vorremmo inviare un rapporto come notifica e-mail ad alcuni dei nostri indirizzi e-mail.invio di posta dal file batch

Come si può fare?

+0

plzsendz tehcodz? –

+2

Sono confuso. Sta chiedendo come inviare email da un file batch. Come non è una domanda di programmazione? – RossFabricant

+0

dannato 'lotto e non bash, dimenticare il mio commento – chburd

risposta

8

bmail. Basta installare il file EXE ed eseguire una riga come questa:

bmail -s myMailServer -f [email protected] -t [email protected] -a "Production Release Performed" 
+0

Qui non posso installare bamil come da scopo di sicurezza. Per favore, dimmi che esiste un modo alternativo per risolvere il mio problema. – user73628

+0

Hai provato con altri client di posta elettronica da riga di comando? Una ricerca su Google elenca un numero considerevole di strumenti disponibili gratuitamente. –

6

Il modo più semplice è quello di utilizzare un'applicazione di terze parti, come detto da altri

Se questo non è un opzione Ho scritto una semplice utility sendmail usando vbscript & CDO che ho chiamato da uno script batch

Vedere gli esempi qui http://www.paulsadowski.com/WSH/cdo.htm

2

Usiamo blat per fare tutto questo tempo nel nostro ambiente. Lo uso anche per connettermi a Gmail con Stunnel. Ecco i params per inviare un file

blat -to [email protected] -server smtp.example.com -f [email protected] -subject "subject" -body "body" -attach c:\temp\file.txt 

Oppure si può mettere il file in quanto il corpo

blat c:\temp\file.txt -to [email protected] -server smtp.example.com -f [email protected] -subject "subject" 
20

È inoltre possibile utilizzare uno script Power Shell:

$smtp = new-object Net.Mail.SmtpClient("mail.example.com") 

if($Env:SmtpUseCredentials -eq "true") { 
    $credentials = new-object Net.NetworkCredential("username","password") 
    $smtp.Credentials = $credentials 
} 
$objMailMessage = New-Object System.Net.Mail.MailMessage 
$objMailMessage.From = "[email protected]" 
$objMailMessage.To.Add("[email protected]") 
$objMailMessage.Subject = "eMail subject Notification" 
$objMailMessage.Body = "Hello world!" 

$smtp.send($objMailMessage) 
+1

upvoted. Ma se non vuoi fare un '.ps1', [puoi chiamarlo direttamente dal batch] (http://stackoverflow.com/a/38604180/2518317) – Hashbrown

+0

La domanda riguardava BATCH, non PowerShell. Poweshell supporta solo W7 e versioni successive –

3

È inoltre possibile utilizzare sendmail. Lo sto utilizzando in questo hook di subversion per inviare notifiche via email: post-commit hook

1

Esistono diversi metodi per gestire questo problema.

Il mio consiglio è di utilizzare la potente applicazione per console freeware di Windows SendEmail.

sendEmail.exe -f [email protected] -o message-file=body.txt -u subject message -t [email protected] -a attachment.zip -s smtp.gmail.com:446 -xu gmail.login -xp gmail.password 
6

PowerShell comes with a built in command for it. Così in esecuzione direttamente da un file .bat:

powershell -ExecutionPolicy ByPass -Command Send-MailMessage^
    -SmtpServer server.address.name^
    -To [email protected]^
    -From [email protected]^
    -Subject Testing^
    -Body 123 

NB-ExecutionPolicy ByPass è necessario solo se non si è impostare le autorizzazioni per l'esecuzione di PS da CMD

Anche per coloro che cercano di chiamare da all'interno di PowerShell mollare tutto prima -Command [inclusiva], e ` sarà il vostro carattere di escape (non ^)