windows - tagger - tag folders
¿Cómo enviar un correo electrónico simple desde un archivo por lotes de Windows? (4)
He usado Blat ( http://www.blat.net/ ) durante muchos años. Es una utilidad de línea de comandos simple que puede enviar correos electrónicos desde la línea de comandos. Es gratis y de código abierto.
Puede usar comandos como "Blat myfile.txt -to [email protected] -server smtp.domain.com -port 6000"
Aquí hay otro software que puede intentar enviar por correo electrónico desde la línea de comando (nunca los he usado):
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
Aquí ( http://www.petri.co.il/send_mail_from_script.htm ) puede encontrar otras formas de enviar correos electrónicos desde un script VBS, además de un enlace a algunos de los programas mencionados.
El siguiente código de VBScript se toma de esa página
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
Guarde el archivo como algo.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
Guarde el archivo como something2.vbs
Creo que estos scripts de VBS usan el servidor de correo predeterminado de Windows, si está presente. No he probado estos guiones ...
Estoy ejecutando Windows 2003 Service Pack 2. Tengo un archivo por lotes que se ejecuta a pedido. Quiero enviar un correo electrónico cada vez que se ejecute el archivo por lotes. El correo electrónico es simple, solo una frase que indica que se ejecutó el archivo por lotes; es lo mismo todo el tiempo
He intentado un par de cosas para hacer esto. Pensé en telnet, pero no puedo descifrar cómo redirigir un conjunto de comandos a telnet; Los archivos por lotes de Windows no tienen un "documento aquí" al estilo de Unix y no funcionó llamar a "telnet <scriptfile"
donde el archivo de comandos contiene los comandos para enviar un correo electrónico. También encontré un par de soluciones en Internet usando CDO.Message, pero nunca las había usado antes y seguía recibiendo mensajes de error que no entendía.
¿Cómo puedo enviar un correo electrónico simple desde un archivo por lotes de Windows?
Max está en el buen camino con la sugerencia de usar Windows Scripting para una forma de hacerlo sin instalar ningún ejecutable adicional en la máquina. Su código funcionará si tiene la configuración del servicio IIS SMTP para reenviar el correo saliente usando la configuración "host inteligente", o si la máquina también está ejecutando Microsoft Exchange. De lo contrario, si no está configurado, encontrará que sus correos electrónicos se acumulan en la carpeta de la cola de mensajes (/ inetpub / mailroot / queue). Entonces, a menos que pueda configurar este servicio, también desea poder especificar el servidor de correo electrónico que desea usar para enviar el mensaje. Para hacer eso, puede hacer algo como esto en su archivo de script de 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
Si PowerShell está disponible, el comando Send-MailMessage es un comando de una sola línea que se puede llamar fácilmente desde un archivo por lotes para manejar las notificaciones por correo electrónico. A continuación se muestra una muestra de la línea que incluiría en su archivo de proceso por lotes para llamar al script de PowerShell (el %xVariable%
es una variable que puede querer pasar de su archivo por lotes al script de PowerShell):
--[ARCHIVO POR LOTES]--
:: ...your code here...
C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -windowstyle hidden -command C:/MyScripts/EmailScript.ps1 %xVariable%
A continuación, se incluye un ejemplo de lo que podría incluir en su secuencia de comandos de PowerShell (debe incluir la línea PARAM como la primera línea que no hace comentarios en su secuencia de comandos si incluyó pasar el %xVariable%
de su archivo por lotes:
- [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
Si no puede seguir la sugerencia de Max de instalar Blat (o cualquier otra utilidad) en su servidor, entonces quizás su servidor ya tenga instalado un software que pueda enviar correos electrónicos.
Sé que tanto Oracle como SqlServer tienen la capacidad de enviar correos electrónicos. Es posible que tenga que trabajar con su DBA para activar esa función u obtener el privilegio de usarla. Por supuesto, puedo ver cómo eso podría presentar su propio conjunto de problemas y burocracia. Suponiendo que pueda acceder a la función, es bastante simple tener un inicio de sesión de archivo por lotes en una base de datos y enviar un correo.
Un archivo por lotes puede ejecutar fácilmente un VBScript a través de CSCRIPT. Una búsqueda rápida en Google encuentra muchos enlaces que muestran cómo enviar correos electrónicos con VBScript. El primero que vi fue http://www.activexperts.com/activmonitor/windowsmanagement/adminscripts/enterprise/mail/ . Se ve directo.