PDA

Visualizza la versione completa : CREARE ED ESEGUIRE UN VBScipt IN TCL


71lucky
09-03-2016, 18:06
Ciao a Tutti/e

ho creato uno script TCL che gira in windows, che ad un certo punto deve creare ed eseguire un VBScript per l'inivo automatico di una mail

L'invio della mail automatica e' legato al funzionamento corretto di alcuni ftp fatto su diverse macchine/server window e linux

Ecco la parte di codice incriminato..



proc ftpfile {} {
global colorbg uf sw sf dd etsn verini


set etsn [string toupper $verini]


$uf.nm.fr.en_tsn delete 0 end
$uf.nm.fr.en_tsn insert 0 $etsn


set valx [string length $etsn]




if { $valx == 5 } {


set newfile [tk_getOpenFile -title "SELECT FILEs TO BE TRANSFERRED" -initialfile Untitled -filetypes {{"All files needed" *.xls} {"All files needed" *.xlsx} {"All files needed" *.XLS} {"All files needed" *.XLSX} {"All files needed" *.txt} {"All files needed" *.pdf} {"All Files" *}} -multiple true]


if { $newfile != "" && $etsn != "" } {


set mymailfile [open "[set name mailfile.vbs]" w]


puts $mymailfile {set WshShell = WScript.CreateObject("WScript.Shell")}


puts $mymailfile {Set argv = WScript.Arguments}


puts $mymailfile {Dim argDir,argv}
puts $mymailfile {Dim argFile}




puts $mymailfile {argDir=argv(0)}
puts $mymailfile {argFile=argv(1)}






puts $mymailfile {WshShell.Run "cmd"}


puts $mymailfile {WScript.Sleep 5}


puts $mymailfile {WshShell.AppActivate "C:\Windows\system32\cmd.exe"}


puts $mymailfile {WScript.Sleep 5}


puts $mymailfile {WshShell.SendKeys "telnet servername.com 25~"}


puts $mymailfile {WScript.Sleep 5}


puts $mymailfile {WshShell.SendKeys "helo xx.com~"}


puts $mymailfile {WScript.Sleep 5}


puts $mymailfile {WshShell.SendKeys "mail from: PAGINAWEB@xx.com~"}


puts $mymailfile {WScript.Sleep 5}


puts $mymailfile {WshShell.SendKeys "rcpt to: indirizzomail~"}


puts $mymailfile {WScript.Sleep 5}


puts $mymailfile {WshShell.SendKeys "rcpt to: indirizzomail~"}


puts $mymailfile {WScript.Sleep 5}


puts $mymailfile {WshShell.SendKeys "data~"}


puts $mymailfile {WScript.Sleep 5}


puts $mymailfile {WshShell.SendKeys "subject: TRANSFERRED FILE NOTIFICATION " & argDir}

puts $mymailfile {WshShell.SendKeys "~"}


puts $mymailfile {WScript.Sleep 5}


puts $mymailfile {WshShell.SendKeys "Hello to all,~"}
puts $mymailfile {WshShell.SendKeys "~"}
puts $mymailfile {WScript.Sleep 5}


puts $mymailfile {WshShell.SendKeys "All selected file " }
puts $mymailfile {WshShell.SendKeys "~"}
puts $mymailfile {WScript.Sleep 5}


puts $mymailfile {WshShell.SendKeys " FILES " & argFile}
puts $mymailfile {WScript.Sleep 5}


puts $mymailfile {WshShell.SendKeys "~"}
puts $mymailfile {WScript.Sleep 5}


puts $mymailfile {WshShell.SendKeys "has been succesfully transferred on WEB page~"}
puts $mymailfile {WshShell.SendKeys "~"}
puts $mymailfile {WScript.Sleep 5}


puts $mymailfile {WshShell.SendKeys "Link http:xxxxxx.ASP Directory " & argDir}
puts $mymailfile {WshShell.SendKeys "~"}
puts $mymailfile {WshShell.SendKeys "~"}
puts $mymailfile {WScript.Sleep 5}


puts $mymailfile {WshShell.SendKeys "Best regards~"}
puts $mymailfile {WshShell.SendKeys "~"}
puts $mymailfile {WScript.Sleep 5}


puts $mymailfile {WshShell.SendKeys "AG8/AGM RA & WFR TEAM~"}
puts $mymailfile {WshShell.SendKeys "~"}
puts $mymailfile {WshShell.SendKeys "~"}
puts $mymailfile {WScript.Sleep 5}


puts $mymailfile {WshShell.SendKeys " ** This email is automatically generated , don't reply to it ** ~"}


puts $mymailfile {WScript.Sleep 100}


puts $mymailfile {WshShell.SendKeys ".~"}


puts $mymailfile {WScript.Sleep 100}


puts $mymailfile {WshShell.SendKeys "quit~"}


puts $mymailfile {WScript.Sleep 100}
puts $mymailfile {WshShell.SendKeys " exit~"}




close $mymailfile




foreach filename $newfile {




set conn2 [ftp::Open server.com user password -progress Progress -mode passive]
### set myfile2 [open "[set name prova3.txt]" w]
ftp::Cd $conn2 DIRECTORY
ftp::MkDir $conn2 $etsn
ftp::Cd $conn2 $etsn

foreach line2 [ftp::Put $conn2 $filename] {


if { $line2 == 0 } {
tk_dialog $uf.msg "ERROR" "All selected files CANNOT be copied on XXX unix area !!" error 0 ok


} else {


}
}
ftp::Close $conn2


#### exec cmd.exe /C del prova3.txt




set conn3 [ftp::Open servername user password -progress Progress -mode passive]
ftp::Cd $conn3 DIRECORY
ftp::Get $conn3 file.asp
ftp::Close $conn3




set conn5 [ftp::Open servername user password -progress Progress -mode passive]
### set myfile2 [open "[set name prova3.txt]" w]
ftp::Cd $conn5 DIRECTORY
ftp::MkDir $conn5 $etsn
ftp::Cd $conn5 $etsn

foreach line5 [ftp::Put $conn5 $filename] {


if { $line5 == 0 } {
tk_dialog $uf.msg "ERROR" "All selected files CANNOT be copied on XXXX unix area !!" error 0 ok


} else {


}
## close $myfile2
}
ftp::Close $conn5






set conn4 [ftp::Open servername user password -progress Progress -mode passive]
# set myfile4 [open "[set name prova33.txt]" a]
ftp::Cd $conn4 DIRECTORY
ftp::MkDir $conn4 $etsn
ftp::Cd $conn4 $etsn

foreach line4 [ftp::Put $conn4 $filename] {


if { $line4 == 0 } {
tk_dialog $uf.msg "ERROR" "All selected files CANNOT be copied on WEB page!!" error 0 ok


if {![file exists "mailfile.vbs "]} {} else {exec cmd.exe /C del mailfile.vbs}


} else {


ftp::Put $conn4 file.asp
exec cmd.exe /C del file.asp






}
## puts $myfile4 "$line4"
}
## close $myfile4
ftp::Close $conn4




### exec cmd.exe /C del prova33.txt


}










if { $line4 != 0 } {
tk_dialog $uf.msg "INFO" "All selected files have been succesfully transferred" info 0 ok




exec cmd.exe /C mailfile.vbs $etsn $newfile




# if {![file exists "mailfile.vbs "]} {} else {exec cmd.exe /C mailfile.vbs $etsn $filename ; exec cmd.exe /C del mailfile.vbs}


}


destroy .
} else {


$uf.nm.fr.en_tsn delete 0 end
if {![file exists "mailfile.vbs "]} {} else {exec cmd.exe /C del mailfile.vbs}


}


} else {
tk_dialog $uf.msg "ERROR" "THE NAME MUST HAVE 5 DIGIT!!" error 0 ok


if {![file exists "mailfile.vbs "]} {} else {exec cmd.exe /C del mailfile.vbs}


$uf.nm.fr.en_tsn delete 0 end
}




}


Il mio problema e' nella definizione della variabile argFile, dato che vorrei passarla come argomento in fase di esecuzione del VBScript scritto mailfile.vbs
Come indicato nello script TCL, la varibile "newfile" puo' essere un solo file, oppure piu' di uno, ma la procedura va in errore

Grazie a tutti per il supporto

Ciao

71lucky
09-03-2016, 18:23
Questi di seguito sono il messagio di errore


26945

e lo script VBS creato


set WshShell = WScript.CreateObject("WScript.Shell")
Set argv = WScript.Arguments
Dim argDir,argv
Dim argFile
argDir=argv(0)
argFile=argv(1)
WshShell.Run "cmd"
WScript.Sleep 5
WshShell.AppActivate "C:\Windows\system32\cmd.exe"
WScript.Sleep 5
WshShell.SendKeys "telnet servername 25~"
WScript.Sleep 5
WshShell.SendKeys "helo xx.com~"
WScript.Sleep 5
WshShell.SendKeys "mail from: PAGINAWEB@xx.com~"
WScript.Sleep 5
WshShell.SendKeys "rcpt to: indirizzomail~"
WScript.Sleep 5
WshShell.SendKeys "rcpt to: indirizzomail~"
WScript.Sleep 5
WshShell.SendKeys "data~"
WScript.Sleep 5
WshShell.SendKeys "subject: TRANSFERRED FILE NOTIFICATION " & argDir
WshShell.SendKeys "~"
WScript.Sleep 5
WshShell.SendKeys "Hello to all,~"
WshShell.SendKeys "~"
WScript.Sleep 5
WshShell.SendKeys "All selected file "
WshShell.SendKeys "~"
WScript.Sleep 5
WshShell.SendKeys " FILES " & argFile
WshShell.SendKeys "~"
WScript.Sleep 5
WshShell.SendKeys "has been succesfully transferred on WEB page~"
WshShell.SendKeys "~"
WScript.Sleep 5
WshShell.SendKeys "Link http://xxx.ASP Directory " & argDir
WshShell.SendKeys "~"
WshShell.SendKeys "~"
WScript.Sleep 5
WshShell.SendKeys "Best regards~"
WshShell.SendKeys "~"
WScript.Sleep 5
WshShell.SendKeys "LUCKY~"
WshShell.SendKeys "~"
WshShell.SendKeys "~"
WScript.Sleep 5
WshShell.SendKeys " ** This email is automatically generated , don't reply to it ** ~"
WScript.Sleep 100
WshShell.SendKeys ".~"
WScript.Sleep 100
WshShell.SendKeys "quit~"
WScript.Sleep 100
WshShell.SendKeys " exit~"

MItaly
09-03-2016, 23:08
Al di lÓ del problema specifico, mi sembra che la procedura che stai usando per inviare la mail sia delirante... generi al volo uno script VBScript che simula la pressione di tasti dentro un telnet lanciato da TCL? Senza cattiveria, ma cambia spacciatore... :stordita:

Non so nulla di TCL, ma con una mezza ricerca su Google si trova subito che Ŕ disponibile (http://stackoverflow.com/a/5322707/214671) un modulo SMTP (qui (http://core.tcl.tk/tcllib/doc/trunk/embedded/www/tcllib/files/modules/mime/smtp.html) la documentazione completa). Ma se anche non fosse, piuttosto che simulare pressioni di tasti qualunque altra soluzione Ŕ meglio, un'altra possibilitÓ pu˛ essere preparare il messaggio in un file e poi chiamare un programma come Blat per spedirlo.

71lucky
14-03-2016, 15:25
Grazie mille Mitaly, per i consigli. :facepalm:
Sto provando ad utilizzare Blat eseguendo il comando:

blat.exe" "testomail.txt" -to indirizzomail@xx.com -subject "NOTIFICATION " -server xxxxxxxxxx -f mittente@xx.com

Scrivendolo nel prompt di dos, funziona tutto correttamente ma se provo ad inserirlo nello script tcl, come:

exec cmd.exe blat.exe" "testomail.txt" -to indirizzomail@xx.com -subject "NOTIFICATION " -server xxxxxxxxxx -f mittente@xx.com

non arriva nessuna mail e non ricevo nessun messaggio di errore.

Sbaglio qualcosa nel eseguire il comando dallo script?

Grazie in anticipo :dh˛:

MItaly
14-03-2016, 19:22
Per far eseguire un comando a cmd.exe si usa l'opzione /c, ma non ti serve... Se devi lanciare blat lancia blat, non serve tirare in ballo cmd... :spy:

(ma in ogni caso, la soluzione corretta sarebbe usare il modulo mail... Hai provato?)

71lucky
15-03-2016, 14:39
Grazie ancora!! Ora il comando blat funziona correttamente... :cool:

Ho fatto qualche prova con il modulo SMTP, ma non riesco ad installarlo.
Nel senso che non ho i permessi per potere installare pacchetti aggiuntivi :facepalm: e questo non e' presente IN ACTIVE TCL 8.6.1.0 che ho io nel PC.

Loading