-1

Windows で Active TCL の Expect Script を使用して、実行されるたびに電子メールを送信しようとしています。以下は私が持っているコードですが、下に表示されるエラーメッセージがあり、問題を回避する方法について助けていただければ幸いです。ありがとうございました。

#!/usr/bin/expect
# \
exec tclsh "$0" ${1+"$@"}
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)

ここで何が間違っているかについてのアイデアはありますか????

4

1 に答える 1

5

リモートホストが接続を閉じてplinkが終了したためだと思います。

smtptcllibのパッケージを使ってみませんか?生のSMTPをplinkでexpectと話すよりもはるかに使いやすいです。

socket要約すると、telnetにはplinkを使用します。これは、tclですでに実行できることです。あなたはsmtpについて話します。これは、それをはるかに簡単に使用できるようにする多くのライブラリが存在するものです。

純粋なtclでメールを送信する例:

package require mime
package require smtp

set tok [::mime::initialize \
    -canonical text/plain \
    -header {From sender@address.example.com} \
    -string {Some Text Here}]
::smtp::sendmessage $tok \
    -servers IP \
    -ports PORT \
    -username ****** \
    -password ****** \
    -recipients recipient@address.example.com \
    -originator sender@address.example.com
::mime::finalize $tok
于 2013-02-04T20:49:34.817 に答える