【问题标题】:Fetched results in imap2 to display in console在 imap2 中获取结果以显示在控制台中
【发布时间】:2015-03-12 18:10:26
【问题描述】:

我制作了一个脚本,连接到 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[] 时,我得到了一些输出,但脚本什么也没显示。有什么想法吗?

【问题讨论】:

  • 我一直在 IMAP 中使用较长的标签(A001 login ... 而不是 1 login ...)以允许脚本等待命令完成。你能试试send "A005 FETCH 1 BODY[]\r\n"expect "A005"
  • 你可以称之为作弊,但如果你真的想在except 中访问 IMAP,你可以使用 Tcl 的 imap4 包(expect 脚本只是 Tcl 代码):docs.activestate.com/activetcl/8.4/tcllib/imap4/…。如果您尚未安装 Tcllib,则需要安装它,但作为奖励,您还可以通过使用 TLS 获得更好的安全性(请参阅我链接到的页面顶部)。

标签: linux shell imap telnet


【解决方案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[]) 并获得相同的数据而无需重复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-23
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    相关资源
    最近更新 更多