2012-01-27 17 views
23

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¿Cómo enviar un correo electrónico simple desde un archivo por lotes de Windows?

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í" de estilo Unix y llamar a "telnet <scriptfile" donde archivo de comandos contiene los comandos para enviar un correo electrónico no funcionó. 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?

+0

[Este] (http://www.msexchange.org/articles/sending-email-without-client.html) podría ayudar. Explica cómo hacerlo desde la línea de comando o usando telnet – vaichidrewar

+0

No hay directorio \ Inetpub \ mailroot \ pickup, por lo que el método de recolección no funciona. No puedo instalar ningún software en la máquina, por lo que el método blat no funciona. No quiero hacer esto manualmente, por lo que el método telnet no funciona. Y no tengo ASP, por lo que ese método no funciona. ¿Alguna otra idea? – user448810

+0

posible duplicado de [envío de correo desde el archivo por lotes] (http://stackoverflow.com/questions/709635/sending-mail-from-batch-file) –

Respuesta

14

Max está en el buen camino con la sugerencia de utilizar 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, usted puede hacer algo como esto en su archivo de comandos 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 
+0

Esto funciona. ¡Gracias! Y gracias a todos los que respondieron. – user448810

12

He usado Blat (http://www.blat.net/) durante muchos años. Es una sencilla utilidad de línea de comandos que puede enviar correos electrónicos desde la línea de comandos. Es gratis y de código abierto.

Puede utilizar comandos como "Blat miarchivo.txt -para [email protected] -server smtp.domain.com -port 6000"

Aquí es algún otro software se puede tratar de enviar correo electrónico desde la línea de comandos (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) se puede encontrar otra forma diferentes de se Nding de correo electrónico 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 

Guardar el archivo como 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 

Guardar el archivo como algo2.vbs

Creo que estas secuencias de comandos VBS utilizan el servidor de correo predeterminado de Windows, si está presente. No he probado estos scripts ...

+0

Sospecho que no se me permitirá poner software de código abierto en el servidor en cuestión. Lo intentaré. ¿Tiene alguna otra sugerencia? – user448810

+1

¡Muchas gracias! ¡Esto funcionó como un regalo! @ user448810 compruébelo usted mismo si la integridad del software está en cuestión. No requiere instalación como tal, simplemente colóquelo en su camino y úselo como lo necesite. – Impulss

+0

O incluso simplemente ponga el blat.exe en el mismo directorio que su script ... –

0

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 miré fue http://www.activexperts.com/activmonitor/windowsmanagement/adminscripts/enterprise/mail/. Se ve directo.

+0

SqlServer está instalado en la máquina. Veré esa opción. Gracias. Mientras tanto, otras sugerencias serán aceptadas con gratitud. – user448810

+0

@ user448810 - Sí, agregué VBScript a mi respuesta. Podría hacerse con JavaScript también. – dbenham

1

Si PowerShell está disponible, el Send-MailMessage commandlet es un solo comando de una línea que podría ser fácilmente llamado 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 el archivo de proceso por lotes para llamar al script de PowerShell (%xVariable% es una variable que puede pasar del archivo por lotes al script de PowerShell):

- [BATCH FILE] -

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

a continuación se muestra un ejemplo de lo que se podría incluir en su script de PowerShell (debe incluir la línea PARAM como la primera línea no observación en el script si se incluye 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 
+0

Fácil de leer y funciona muy bien. En el caso de los mensajes de texto sin formato (sin el argumento '-BodyAsHtml') newline se denota con' \ 'n' o' \ 'r \' n'. – miroxlav

Cuestiones relacionadas