我制作了一个连接到imap服务器然后发送不同消息的脚本,以便获取第一封邮件[我只需要第一封邮件]。 当我运行脚本时,我没有得到任何结果,但是当我在终端中键入相同的最后一个命令时,我得到一个结果。
知道如何解决这个问题吗?
我的剧本:
#!/usr/bin/expect
#!/bin/bash
set password 'ent'
spawn telnet host imap2
send "1 login picard enterprise\r"
send "2 list '' '*'\r"
expect "*"
send "3 EXAMINE INBOX\r"
send "4 fetch 1 all\r"
send "5 fetch 1 body[]\r"
正如我之前所说,当我在终端输入5 fetch 1 body[]
时,我会得到一些输出,但脚本没有显示任何内容。有什么想法?
答案 0 :(得分:1)
您的脚本有几个语法错误,我认为您根本没有尝试过研究IMAP语法。
send "1 login picard enterprise\r"
这是正确的,前提是登录名和密码不包含空格或其他奇数字符,并且当您在其中键入\ r时,Expect实际发送\ r \ n。
send "2 list '' '*'\r"
''
不是IMAP,IMAP使用""
。
send "3 EXAMINE INBOX\r"
3.在IMAP中空间不是幂等的,你有一个太多的空间;如果协议说要使用一个空间,你必须使用一个,不论是也不是更少。
send "4 fetch 1 all\r"
send "5 fetch 1 body[]\r"
ALL
and BODY[]
overlap,你为什么送两个?您只需发送4 FETCH 1 (FLAGS INTERNALDATE BODY[])
即可获得相同的数据而无需重复。