Comment envoyer un simple e-mail à partir d'un fichier Windows batch?

j'exécute Windows 2003 Service Pack 2. J'ai un fichier batch qui fonctionne à la demande. Je veux avoir un e-mail chaque fois que le fichier de commandes est exécuté. Le courriel est simple, juste une phrase indiquant que le fichier batch a fonctionné; il est le même à chaque fois.

j'ai essayé plusieurs choses pour y arriver. J'ai pensé à telnet, mais je n'arrive pas à trouver comment rediriger un ensemble de commandes dans telnet; les fichiers Windows batch N'ont pas le style Unix "here document", et l'appel "telnet <scriptfile" scriptfile contient les commandes pour envoyer un email n'a pas fonctionné. J'ai aussi trouvé quelques solutions sur internet en utilisant CDO.Message, mais je ne l'ai jamais utilisé avant et je continuais à recevoir des messages d'erreur que je ne comprends pas.

Comment puis-je envoyer un simple e-mail à partir d'un fichier Windows batch?

26
demandé sur Will Ness 2012-01-27 23:28:40

4 réponses

Max est sur la bonne voie avec la suggestion d'utiliser Windows Scripting pour un moyen de le faire sans installer d'exécutables supplémentaires sur la machine. Son code fonctionnera si vous avez la configuration du service SMTP de L'IIS pour transmettre le courriel sortant en utilisant le paramètre" smart host", ou si la machine exécute également Microsoft Exchange. Sinon, si ce n'est pas configuré, vous trouverez vos e-mails empilés dans le dossier message file (\inetpub\mailroot\queue). Donc, à moins que vous pouvez configurer ce service, vous aussi vous voulez être en mesure de spécifier le serveur de messagerie que vous souhaitez utiliser pour envoyer le message. Pour ce faire, vous pouvez faire quelque chose comme cela dans votre fichier Windows script:

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 = "your@address.com"
objMail.To = "destination@address.com"
objMail.Subject = "Email Subject Text"
objMail.TextBody = "The message of the email..."
objMail.Send
Set objFlds = Nothing
Set objConf = Nothing
Set objMail = Nothing
15
répondu dmarietta 2012-01-27 20:45:21

j'ai utilisé Blat ( http://www.blat.net / ) pendant de nombreuses années. C'est un utilitaire de ligne de commande simple qui peut envoyer des e-mails depuis la ligne de commande. C'est gratuit et opensource.

vous pouvez utiliser la commande comme "Blat myfile.txt-to fee@fi.com -serveur smtp.domain.com -port 6000"

Voici d'autres logiciels que vous pouvez essayer d'envoyer par email depuis la ligne de commande (Je ne les ai jamais utilisés):

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

ici ( http://www.petri.co.il/send_mail_from_script.htm ) you peut trouver d'autres différentes façon d'envoyer un e-mail à partir d'un script VBS, plus le lien vers le logiciel mentionné

le code VBScript suivant est tiré de cette page

Set objEmail = CreateObject("CDO.Message")
objEmail.From = "me@mydomain.com"
objEmail.To = "you@yourdomain.com"
objEmail.Subject = "Server is down!"
objEmail.Textbody = "Server100 is no longer accessible over the network."
objEmail.Send

Enregistrer le fichier comme quelque chose.vbs

Set Msg = CreateObject("CDO.Message")

With Msg

 .To = "you@yourdomain.com"
 .From = "me@mydomain.com"
 .Subject = "Hello"
 .TextBody = "Just wanted to say hi."
 .Send

End With

Enregistrer le fichier comme something2.vbs

je pense que ces scripts VBS utilisent le serveur de messagerie par défaut de windows, s'il est présent. Je n'ai pas testé ces scripts...

12
répondu Max 2012-01-27 20:26:53

si PowerShell est disponible, la commande Send-MailMessage est une commande monoligne qui pourrait facilement être appelée à partir d'un fichier par lots pour traiter les notifications par courriel. Voici un exemple de la ligne que vous incluriez dans votre fichier batch pour appeler le script PowerShell (la %xVariable% est une variable que vous pourriez vouloir passer de votre fichier batch au script PowerShell):

--[FICHIER DE LOT]--

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

ci-dessous est un exemple de ce que vous pourriez inclure dans votre script PowerShell (vous devez inclure la ligne PARAM comme première ligne non-remark dans votre script si vous avez inclus passer le %xVariable% de votre fichier batch:

--[SCRIPT 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  
2
répondu cabotscott 2017-10-31 15:52:53

si vous ne pouvez pas suivre la suggestion de Max d'installer Blat (ou tout autre utilitaire) sur votre serveur, alors peut-être que votre serveur a déjà installé un logiciel qui peut envoyer des e-mails.

je sais que les deux Oracle et SqlServer ont la capacité d'envoyer des e-mails. Vous devrez peut-être travailler avec votre DBA pour activer cette fonctionnalité et/ou obtenir le privilège de l'utiliser. Bien sûr, je vois comment cela pourrait présenter sa propre série de problèmes et de tracasseries administratives. En supposant que vous pouvez accéder à fonction, il est assez simple d'avoir une connexion de fichier par lot à une base de données et envoyer du courrier.

un fichier batch peut facilement exécuter un VBScript via CSCRIPT. Une recherche rapide de google trouve de nombreux liens montrant comment envoyer un e-mail avec VBScript. Le premier que j'ai regardé était http://www.activexperts.com/activmonitor/windowsmanagement/adminscripts/enterprise/mail / . Il a l'air tout droit vers l'avant.

0
répondu dbenham 2012-01-27 20:24:00