Ejecutar sendmail.exe desde consola

Tengo el siguiente batch

@echo off
Echo -------------------------------------------------------------------------------------------------------------
Title Generacion archivo de facturacion

Echo Fecho de arranque %DATE% %TIME% .
c:
cd C:\Program Files\Microsoft SQL Server\100\Tools\Binn

bcp "select 'CodigoCampana Agente TipoCampana Oferta1 Oferta2 Identificacion NombreCliente FechaGestion Estatus UltimoTelefonoContacto Proveedor ObservacionMotivoNoDesea DuracionTotal DuracionUltimaLlamada NumeroIntentos TipoRegistro MontoColocadoOferta1 MontoColocadoOferta2' union all select isnull (campana_banco,'') + nchar(9) + isnull (agente,'') + nchar(9) + 'COMERCIAL' + nchar(9) + case campana when 'PCH_venta_no_cliente' then 'TARJETA DE CREDITO' when 'PCH_venta_cliente' then 'TARJETA DE CREDITO' when 'PCH_venta_adicional' then 'TARJETA DE CREDITO ADICIONAL' else '' end + nchar(9) + '' + nchar(9) + cedula + nchar(9) + cliente + nchar(9) + isnull (CONVERT(varchar(10),fecha_fin,121),'') + nchar(9) + ges.gestion + nchar(9) + isnull (isnull (tlf_llamada, substring ((select top(1) ph_number from reportes.dbo.intentos_telefonico where contact = easycode order by start_time DESC),2,10)),'') + nchar(9) + 'GXC' + nchar(9) + case g.gestion when 'CU4' then '' when 'SG' then '' else g.d_tipo_gestion end + nchar(9) + isnull (CONVERT(CHAR(8), DATEADD(ss,(select sum(duracion)/10 from reportes.dbo.intentos_telefonico where contact = easycode and estado_llamada = 'conectado'),'19000101'),108),'00:00:00') + nchar(9) + isnull (CONVERT(CHAR(8), DATEADD(ss,(select top (1) duracion/10 from reportes.dbo.intentos_telefonico where contact = easycode and estado_llamada = 'conectado' order by start_time DESC),'19000101'),108),'00:00:00') + nchar(9) + convert (varchar,(select count (contact) from reportes.dbo.intentos_telefonico where contact = ges.easycode and estado_llamada = 'marcando')) + nchar(9) + 'CAMPANAS' + nchar(9) + isnull ((case g.gestion when 'CU1' then convert (varchar(13), cupo)+'.00' else '0.00' end),'0.00') + nchar(9) + '0.00' from reportes.dbo.gestion_out_pch ges left outer join reportes.dbo.PCH_dic_gestion AS g ON ges.gestion = g.gestion and ges.tipo_gestion = g.tipo_gestion where nombre_base in ('BASE_TCA JULIO 2017 GXC 15000','BASE MT MAYO II PRI TC GXC 0020','MT JULIO PRI TC GXC 026','BASE_SMS_JULIO_2017','Base_CALIFICACION REACTIVACION CAMPANA 01_JUN17_2') and last in (1,3)" queryout C:\pichincha_datos\OUTBND_GXC.txt -S 172.16.134.9\reportes -U easy -P easy -c -S PPM-ALTDB -C

c:
cd C:\pichincha_datos

set anio=%date:~10,4%
set dia=%date:~7,2%
set mes=%date:~4,2%

ren OUTBND_GXC.txt OUTBND_GXC_%anio%_%mes%_%dia%.txt

set FECHA= %date%
set FECHA=%FECHA:/=%
set FECHA=%FECHA: =%
set FECHA=%FECHA::=%
set FECHA=%FECHA:,=%

set HORA= %time%
set HORA=%HORA:/=%
set HORA=%HORA: =%
set HORA=%HORA::=%
set HORA=%HORA:,=%

sendEmail -f [email protected] -t [email protected] smtp.gmail.com:587 -u "Gestion Pichincha" -m "Envio la Gestion del mes de campanas Pichincha" -a OUTBND_GXC_%anio%_%mes%_%dia%.txt -v -xu [email protected] -xp xxxxxxxxxx -o tls=yes

move OUTBND_GXC_%anio%_%mes%_%dia%.txt C:\pichincha_datos\historico\

Echo Fecho de finalizacion %DATE% %TIME%.
Echo -------------------------------------------------------------------------------------------------------------
exit

Pero el problema es que sendmail.exe no me acepta el uso de variables dentro de su estructura; habra alguna forma de setear toda esta linea en una variable, ¿para luego ejecutarla y poder asi generar la linea con el nombre del archivo dinamicamente?

1 respuesta

Respuesta
2

No me encaja lo que dices de que "sendemail no acepta el uso de variables dentro de su estructura". Cuando desde un bat (y en general desde cualquier lenguaje interpretado) se llama o invoca a un programa se resuelven previamente los valores actuales de las variables, de modo que el sendemail, como cualquier programa al que se llame desde un bat, no ve las variables del bat sino los valores asignados a las mismas en el caso concreto. Pero trabajar con todo ese código solo para intentar localizar un problema tan concreto como el que comentas resulta un poco farragoso y puede que "los árboles no dejen ver el bosque". Te propongo trabajar sobre lo que sigue:

@echo off
set anio=%date:~10,4%
set dia=%date:~7,2%
set mes=%date:~4,2%
ren prueba.txt prueba_%anio%_%mes%_%dia%.txt
sendEmail -f [email protected] -t [email protected] smtp.gmail.com:587 -u "Gestion Pichincha" -m "Envio la Gestion del mes de campanas Pichincha" -a prueba_%anio%_%mes%_%dia%.txt -v -xu [email protected] -xp xxxxxxxxxx -o tls=yes

y nos cuentas qué problema te da el sendemail y qué mensajes

Por cierto que copié, sin siquiera revisarlas, las asignaciones de las variables anio, dia y mes, pero, ahora que intento reproducir la ejecución del bat reducido propuesto, me encuentro con que no parecen correctas, al menos para mi formato de DATE. ¿Con qué versión de Windows trabajas y cuál es la salida típica del comando DATE?

Estimado

Ya lo pude resolver

lo hice asi:

set anio=%date:~10,4%
set dia=%date:~7,2%
set mes=%date:~4,2%


ren OUTBND_GXC.txt OUTBND_GXC_%anio%_%mes%_%dia%.txt


set archivo=sendEmail -f [email protected] -t [email protected], [email protected], [email protected], [email protected], [email protected], [email protected] -s smtp.gmail.com:587 -u "Gestion Pichincha" -m "Envio la Gestion del mes de campanas Pichincha" -a OUTBND_GXC_%anio%_%mes%_%dia%.txt -v -xu [email protected] -xp Emelec10 -o tls=yes

%archivo%

muchas gracias!!!!

Me alegro de que lo hayas resuelto, pero sigo pensando que no era necesario crear la variable archivo con todo el contenido de la invocación a sendemail y que el problema debía estar en otra parte. ¿Qué ocurre si en lugar de asignar la cadena de invocación a sendemail la ejecutas directamente, tal cual está? ¿Da algún error? Es decir, si en lugar de lo anterior haces esto:

set anio=%date:~10,4%
set dia=%date:~7,2%
set mes=%date:~4,2%
ren OUTBND_GXC.txt OUTBND_GXC_%anio%_%mes%_%dia%.txt
sendEmail -f [email protected] -t [email protected][email protected][email protected][email protected][email protected][email protected] -s smtp.gmail.com:587 -u "Gestion Pichincha" -m "Envio la Gestion del mes de campanas Pichincha" -a OUTBND_GXC_%anio%_%mes%_%dia%.txt -v -xu [email protected] -xp ******* -o tls=yes

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas