如何通过 OpenSSL 在 Shell 中与 IMAP 服务器通信
Posted
技术标签:
【中文标题】如何通过 OpenSSL 在 Shell 中与 IMAP 服务器通信【英文标题】:How to talk to IMAP server in Shell via OpenSSL 【发布时间】:2013-02-04 06:00:59 【问题描述】:我想通过 Mac OS X 终端向服务器发送 IMAP 命令并获得响应。我可以使用这条线连接到服务器:
openssl s_client -connect imap.gmail.com:993
我可以成功登录:
? LOGIN m.client2 passwordhere
但是所有其他命令都不起作用,服务器没有响应。例如,我尝试过:
? LIST "" "*"
? SELECT INBOX
【问题讨论】:
Mac OS X 终端不是 Bash。终端和shell不一样! 这个命令序列(在选择收件箱之后)很有用:4 SEARCH SENTSINCE "14-Oct-2018"
,然后选择一个数字并执行5 FETCH XXXX (FLAGS BODY[HEADER.FIELDS (DATE FROM SUBJECT)] BODY[TEXT])
以查看完整的电子邮件。
【参考方案1】:
在朋友的帮助下发现了一个错误:
openssl s_client -connect imap.gmail.com:993 -crlf
-crlf很关键
【讨论】:
我在寻找服务器忽略我所有命令的原因时遇到了这个问题。它会在一段时间不活动后超时,但只要我继续输入,连接就会保持打开状态(但它从未响应)。 Gmail 似乎在过去几天推出了更新,现在需要此选项。 Cyrus IMAPd 仍然没有必要。 (多年来,在没有-crlf
的情况下,我一直定期以这种方式连接所有 Gmail 访问权限,但从几天前开始,一些连接会挂起,而今天它们都挂起。)
显然,自此发布以来,cmdline 语法已收紧:新语法为:openssl s_client -crlf localhost:993
。请注意,-crlf
选项出现在主机名之前。【参考方案2】:
试试这个,这应该对你有用(用你的
替换第一行openssl s_client -connect imap.gmail.com:993 -crlf
命令(强制 -crlf)& 只输入蓝色部分):
【讨论】:
【参考方案3】:首先,您的 gmail 帐户是否已激活 imap? 如果您能够成功登录,则表示 ssl 工作正常。 你得到的返回码是什么
a1 LOGIN m.client2 passwordhere 命令。
你试过这个命令吗
a1 能力
尝试其他替代命令,因为并非所有 IMAP 服务器都实现所有 IMAP 命令。 我在为 gmail rediffmail yahoo 等不同供应商创建数据迁移工具时遇到了这个问题......
【讨论】:
【参考方案4】:需要考虑的更多选项:您可能正在连接到提供 STARTTLS
的服务器(尤其是端口 143 上的 IMAP),在这种情况下,您可以告诉 openssl 继续协商,您需要指定您使用的协议'正在使用(从pop3
、imap
、smtp
、ftp
中选择); -crlf
选项已被其他人提及,如果我正在调试 SSL/TLS 配置,我还发现 -showcerts
选项很有用。因此,例如,您最终可能会得到,
openssl s_client -showcerts -connect target.server.name.here:143 -starttls imap
如果你有相关手册页的更多选项,
man s_client
【讨论】:
以上是关于如何通过 OpenSSL 在 Shell 中与 IMAP 服务器通信的主要内容,如果未能解决你的问题,请参考以下文章