2013-02-04 120 views
-1

试图在Windows中使用Expect Script中的活动TCL在每次运行时发送一封电子邮件。以下是我拥有的代码,但下面显示了一条错误消息,希望对如何避免此问题提供任何帮助。谢谢。Expect脚本Telnet电子邮件脚本

#!/usr/bin/expect 
# \ 
exec tclsh "$0" ${1+"[email protected]"} 
package require Expect 

spawn plink -telnet IP PORT 
send "ehlo *******.com\r"; 
send "AUTH LOGIN\r"; 
expect "334 VXNlcm5hbWU6" sleep .1; 
send "*************\r"; 
sleep .1; 
expect "334 UGFzc3dvcmQ6\r" 
send "********\r"; 
sleep .1; 
expect "235 Authentication succeeded\r"; 
send "MAIL from:******@*******.com\r"; 
expect "250 OK\r" 
send "RCPT to:********@*********.com\r"; 
expect "250 Accepted\r" 
send "DATA\r"; 
send "!!!TEXT HERE!!!\r"; 
send ".\r"; 
send "QUIT\r"; 
exit 

得到一个错误:

Error in startup script 

send: spawn id exp2 not open 
      while executing 
"send "MAIL from:*****@******.com\r"" 
    (file "***.tcl" line 16) 

对什么是错在这里的任何想法????

+0

显然,邮件服务器关闭的连接。你看到输出,并没有说它为什么会断开连接? (在发送任何东西之前,我建议等待其'220 ...'的标题,或者至少睡一会儿)。 –

回答

5

我想因为远程主机关闭了连接,并且plink退出。

为什么不使用tcllib的smtp包? 这比使用plink的原生smtp更容易使用。

总结:您使用plink作为telnet,您可以使用tcl socket已经做的事情。 你说smtp,其中存在许多库使得使用它更容易。纯TCL发送邮件的

例子:

package require mime 
package require smtp 

set tok [::mime::initialize \ 
    -canonical text/plain \ 
    -header {From [email protected]} \ 
    -string {Some Text Here}] 
::smtp::sendmessage $tok \ 
    -servers IP \ 
    -ports PORT \ 
    -username ****** \ 
    -password ****** \ 
    -recipients [email protected] \ 
    -originator [email protected] 
::mime::finalize $tok 
+0

新的期待/ TCL脚本。 我将如何去完成我在上面使用smtp包进行的尝试? 或者有没有办法避免它关闭? – user2040938

+0

安装tcllib,用'package require smtp'启动脚本,然后在http://wiki.tcl.tk/1256上查看示例。 –

+1

要安装tcllib,如果您在* nix系统上,只需使用您的数据包管理器来安装tcllib即可。在windows上,如果你有ActiveState的Tcl发行版,你可以在命令行执行'teacup install smtp'和'teacup install mime',或者从[SourceForge](http://sourceforge.net/projects/tcllib/)下载它并执行该操作(默认值通常很好)。 –