Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tcl 期望将变量中的文本作为开关发送_Tcl_Expect - Fatal编程技术网

Tcl 期望将变量中的文本作为开关发送

Tcl 期望将变量中的文本作为开关发送,tcl,expect,Tcl,Expect,说到expect/Tcl,我完全是个新手。我试图使用expect来测试我的自定义邮件配置,但当我希望将行缓冲区的内容视为文本时,它似乎将行缓冲区的内容解释为具有附加标志。我得到的错误是由MIME边界引起的。任何帮助都将不胜感激(我发现类似的问题,但没有答案) 错误标志“------0408020907005010508302”:必须是-i、-h、-s、-null、-0、-raw、-break或-- spawn telnet$server 25 期望“连接” 期待“220” 发送“HELO\n”

说到expect/Tcl,我完全是个新手。我试图使用expect来测试我的自定义邮件配置,但当我希望将行缓冲区的内容视为文本时,它似乎将行缓冲区的内容解释为具有附加标志。我得到的错误是由MIME边界引起的。任何帮助都将不胜感激(我发现类似的问题,但没有答案)

错误标志“------0408020907005010508302”:必须是-i、-h、-s、-null、-0、-raw、-break或--
spawn telnet$server 25
期望“连接”
期待“220”
发送“HELO\n”
期待“250”
发送“邮件发件人:\n”
期待“250”
发送“RCPT至:\n”
期待“250”
睡眠2
发送“数据\n”
期待“354”
睡眠2
设置fh[open mailtest.txt]
而{[get$fh read_line]!=-1}{
发送$read#当该行以--
发送“\n”;
}
收盘价$fh
发送“\n”
睡眠2
发送“退出\n”
部分输入示例(MIME分隔符导致爆炸):

。。。标题。。。
MIME版本:1.0
内容类型:多部分/备选;
边界=------0408020907005010508302
这是MIME格式的多部分消息。

--------------0408020907005010508302所以在四处搜索之后,我在几个不同的地方找到了答案。Send只需要一个(--)参数来表示没有额外的标志,并且所有剩余的文本都是文本:

while {[gets $fh read_line] != -1} {
        send -- $read_line
        send "\n";
}

别担心。当然,我一发布问题就找到了答案:发送--“字符串”如果你有答案,做一个自我回答。这是允许和鼓励的。
spawn telnet $server 25
expect "Connected"
expect "220 "
send "HELO <domain>\n"
expect "250 "
send "MAIL FROM: <sender>\n"
expect "250 "
send "RCPT TO: <recipient>\n"
expect "250 "
sleep 2
send "DATA\n"
expect "354" 
sleep 2
set fh [open mailtest.txt]   
while {[gets $fh read_line] != -1} {
        send $read_line      # This explodes when the line starts with --
        send "\n";
}
close $fh
send ".\n"
sleep 2   
send "QUIT\n"
... header ...
MIME-Version: 1.0
Content-Type: multipart/alternative;
        boundary=------------040802090700050105080302

This is a multi-part message in MIME format.
--------------040802090700050105080302   <-- bomb
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit

... rest of MIME body ...
while {[gets $fh read_line] != -1} {
        send -- $read_line
        send "\n";
}