如何通过OpenSSL在Shell中与IMAP服务器通信

59

我想通过 Mac OS X 终端发送 IMAP 命令到服务器并获取响应。我可以使用以下命令连接到服务器:

openssl s_client -connect imap.gmail.com:993

并且我可以成功登录:

? LOGIN m.client2 passwordhere

但是所有其他命令都无法正常工作,服务器没有响应。例如我尝试了这个:

? LIST "" "*"
? SELECT INBOX

3
Mac OS X 终端不等同于 Bash。终端和 shell 不是同一个东西! - johnsyweb
在选择收件箱后,以下命令序列非常有用:4 SEARCH SENTSINCE "14-Oct-2018",然后选择一个数字并执行 5 FETCH XXXX (FLAGS BODY[HEADER.FIELDS (DATE FROM SUBJECT)] BODY[TEXT]) 以查看完整的电子邮件。 - Florian
4个回答

81

在朋友的帮助下发现了一个错误:


openssl s_client -connect imap.gmail.com:993 -crlf

-crlf 是关键。


我在寻找服务器忽略我所有命令的原因时发现了这个问题。它会在一段时间的不活动后超时,但只要我继续输入,连接就会保持打开状态(但从未响应)。 - Jeremy Figgins
Gmail似乎在过去几天推出了一项更新,现在需要这个选项。对于Cyrus IMAPd来说仍然不是必需的。(我多年来一直通过这种方式连接我的Gmail,没有使用“-crlf”,但是从几天前开始,有些连接会挂起,今天它们全部挂起了。) - Greg A. Woods
2
显然,自此帖子发布以来,cmdline语法已经紧缩:新的语法是:openssl s_client -crlf localhost:993。请注意,在主机名之前出现了-crlf选项。 - John Greene

25

试一试这个,这应该对你有用(将第一行替换为你的

openssl s_client -connect imap.gmail.com:993 -crlf

命令(必须使用-crlf)& 仅输入蓝色部分:

输入图像描述


5
考虑以下几个选项:您可能连接到提供STARTTLS(特别是在143端口上用于IMAP)的服务器,在这种情况下,您可以告诉openssl继续协商此事,您需要指定正在使用哪个协议(从pop3imapsmtpftp中选择)。其他人已经提到了-crlf选项,如果我正在调试SSL / TLS配置,我还发现-showcerts选项很有用。因此,例如,您可能会得到以下结果:
 openssl s_client -showcerts -connect target.server.name.here:143 -starttls imap

如果您有相关的手册可用,可以通过手册获得更多选项。

涉及IT技术。
man s_client

5

首先,您的Gmail帐户上是否已激活IMAP? 如果您能够成功登录,则表示SSL正常工作。 那么您得到的返回代码是什么?

a1 LOGIN m.client2 passwordhere command.

您尝试过该命令吗?

a1 capability

请尝试其他替代命令,因为并非所有IMAP服务器都实现了所有IMAP命令。 我在为不同供应商(如Gmail、Rediffmail和Yahoo)创建数据迁移工具时遇到了这个问题...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接