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