J'utilise Windows 2003 Service Pack 2. J'ai un fichier de commandes qui s'exécute à la demande. Je souhaite recevoir un courrier électronique à chaque exécution du fichier de commandes. L'e-mail est simple, juste une phrase indiquant que le fichier de commandes a été exécuté. c'est la même chose à chaque fois.
J'ai essayé plusieurs choses pour y arriver. J'ai pensé à telnet, mais je ne vois pas comment rediriger un ensemble de commandes vers telnet; Les fichiers de commandes Windows n’ont pas de "document ici" de style Unix et appellent "telnet <scriptfile"
où fichier de script contient les commandes pour envoyer un courrier électronique ne fonctionnait pas. J'ai également trouvé quelques solutions sur Internet en utilisant CDO.Message, mais je ne l'avais jamais utilisé auparavant et j'ai continué à recevoir des messages d'erreur que je ne comprenais pas.
Comment puis-je envoyer un simple email à partir d'un fichier batch Windows?
Max est sur la bonne voie avec la suggestion d'utiliser Windows Scripting pour pouvoir le faire sans installer d'exécutables supplémentaires sur la machine. Son code fonctionnera si vous avez le paramètre IIS) pour transférer le courrier électronique sortant à l’aide du paramètre "hôte intelligent" ou si la machine exécute également Microsoft Exchange. Sinon, si cela n’est pas configuré. , vos e-mails ne font que s'accumuler dans le dossier de la file d'attente des messages (\ inetpub\mailroot\queue). Ainsi, à moins de pouvoir configurer ce service, vous souhaitez également pouvoir spécifier le serveur de messagerie que vous souhaitez utiliser pour l'envoi du message. Pour faire cela, vous pouvez faire quelque chose comme ceci dans votre fichier de script 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
J'ai utilisé Blat ( http://www.blat.net/ ) pendant de nombreuses années. C'est un simple utilitaire de ligne de commande qui peut envoyer des emails à partir de la ligne de commande. C'est gratuit et opensource.
Vous pouvez utiliser une commande du type "Blat myfile.txt -to [email protected] -server smtp.domain.com -port 6000"
Voici quelques autres logiciels que vous pouvez essayer d’envoyer des emails en 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 ) vous pouvez trouver un autre moyen d’envoyer des courriers électroniques à partir d’un script VBS, ainsi qu’un lien vers certains des logiciels mentionnés.
Le code VBScript suivant provient de cette page
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
Enregistrez le fichier sous quelque chose.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
Enregistrez le fichier sous quelque chose2.vbs
Je pense que ces scripts VBS utilisent le serveur de messagerie Windows par défaut, le cas échéant. Je n'ai pas testé ces scripts ...
Si PowerShell est disponible, le commandlet Send-MailMessage est une commande unique d'une ligne qui peut facilement être appelée à partir d'un lot. fichier pour gérer les notifications par courrier électronique. Vous trouverez ci-dessous un exemple de la ligne que vous souhaitez inclure dans votre fichier de commandes pour appeler le script PowerShell (le %xVariable%
est une variable que vous voudrez peut-être transmettre de votre fichier de commandes au script PowerShell):
- [DOSSIER DE LOT] -
:: ...your code here...
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -windowstyle hidden -command C:\MyScripts\EmailScript.ps1 %xVariable%
Vous trouverez ci-dessous un exemple de ce que vous pouvez inclure dans votre script PowerShell (vous devez inclure la ligne PARAM en tant que première ligne sans remarque dans votre script si vous avez inclus le passage du %xVariable%
de votre fichier de commandes:
- [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
Cela fonctionne pour moi, en utilisant des guillemets doubles autour des variables.
J'utilise un script batch pour appeler Powershell Send-MailMessage
Script de lot: send_email.bat
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command 'E:\path\send_email.ps1
Script Pwershell send_email.ps1
Send-MailMessage -From "noreply@$env:computername" -To '<[email protected]>' -Subject 'Blah Blah' -SmtpServer 'smtp.domain.com' -Attachments 'E:\path\file.log' -BODY "Blah Blah on Host: $env:computername "
$emailSmtpServerPort = "587"
$emailSmtpUser = "username"
$emailSmtpPass = 'password'
$emailMessage = New-Object System.Net.Mail.MailMessage
$emailMessage.From = "[From email address]"
$emailMessage.To.Add( "[Send to email address]" )
$emailMessage.Subject = "Testing e-mail"
$emailMessage.IsBodyHtml = $true
$emailMessage.Body = @"
<p>Here is a message that is <strong>HTML formatted</strong>.</p>
<p>From your friendly neighborhood IT guy</p>
"@
$SMTPClient = New-Object System.Net.Mail.SmtpClient( $emailSmtpServer , $emailSmtpServerPort )
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential( $emailSmtpUser , $emailSmtpPass );
$SMTPClient.Send( $emailMessage )
Si vous ne pouvez pas suivre la suggestion de Max d'installer Blat (ou tout autre utilitaire) sur votre serveur, il est possible que votre serveur ait déjà installé un logiciel capable d'envoyer des courriels.
Je sais qu'Oracle et SqlServer ont tous deux la capacité d'envoyer un courrier électronique. Vous devrez peut-être travailler avec votre administrateur de base de données pour activer cette fonctionnalité et/ou obtenir le privilège de l'utiliser. Bien sûr, je peux voir comment cela pourrait présenter ses propres problèmes et tracasseries administratives. En supposant que vous puissiez accéder à cette fonctionnalité, il est relativement simple de se connecter à une base de données par lots à une base de données et d’envoyer un courrier électronique.
Un fichier de commandes peut facilement exécuter un VBScript via CSCRIPT. Une recherche rapide sur Google trouve de nombreux liens indiquant comment envoyer un courrier électronique avec VBScript. Le premier que j'ai consulté était http://www.activexperts.com/activmonitor/windowsmanagement/adminscripts/enterprise/mail/ . Cela semble simple.