如何通过 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 继续协商,您需要指定您使用的协议'正在使用(从pop3imapsmtpftp中选择); -crlf 选项已被其他人提及,如果我正在调试 SSL/TLS 配置,我还发现 -showcerts 选项很有用。因此,例如,您最终可能会得到,

 openssl s_client -showcerts -connect target.server.name.here:143 -starttls imap

如果你有相关手册页的更多选项,

man s_client

【讨论】:

以上是关于如何通过 OpenSSL 在 Shell 中与 IMAP 服务器通信的主要内容,如果未能解决你的问题,请参考以下文章

管道openssl命令

在 shell 脚本中与非 root 用户连接后更改 root

如何支持自定义安装的高版本openssl库

使用 OpenSSL 反弹加密 shell

使用openssl生成SSL完全参考手册

shell中与运算 cut切分行 if while综合在一起的一个例子