来自linux的IMAP连接回车换行问题?

时间:2011-12-30 19:02:09

标签: exchange-server imap

我正在尝试使用Mail :: IMAPClient连接到我们的Exchange服务器,但是当我将其从运行ubuntu的临时开发桌面移动到运行centos的新开发环境时,正在运行的脚本出现问题。在那段时间里,我发现交换服务器已经升级了,我想到2010年。是否有一个交换设置允许使用换行处理命令而不是需要crlf,或者这可能是本地系统(运行脚本问题)?

这一段时间过了一段时间。

$openssl s_client -connect myhost.mydomain.net:993
...
* OK The Microsoft Exchange IMAP4 service is ready - 'myhost'
? login username password
* BYE Connection is closed. 13
read:errno=0

命令可以正常运行。

$openssl s_client -crlf -connect myhost.mydomain.net:993
...
* OK The Microsoft Exchange IMAP4 service is ready - 'myhost'
? login username password
? OK LOGIN completed.
? select inbox
* 4 EXISTS
* 0 RECENT
* FLAGS (\Seen \Answered \Flagged \Deleted \Draft $MDNSent)
* OK [PERMANENTFLAGS (\Seen \Answered \Flagged \Deleted \Draft $MDNSent)] Permanent     flags
* OK [UNSEEN 3] Is the first unseen message
* OK [UIDVALIDITY 169533] UIDVALIDITY value
* OK [UIDNEXT 132] The next unique identifier value
? OK [READ-WRITE] SELECT completed.
1 logout
* BYE Microsoft Exchange Server 2010 IMAP4 server signing off.
1 OK LOGOUT completed.
read:errno=0

[解决方法:]
试图使用openssl与服务器建立手动ssl连接 我必须包含-crlf选项,以便交换可以识别终止的IMAP命令。

2 个答案:

答案 0 :(得分:7)

它位于RFC3501的section 2.2中,但这是概述的一部分。

  

客户端和服务器传输的所有交互都是行的形式,即以CRLF结尾的字符串。

请注意,条款中没有“必须”。

Dovecot和其他IMAP服务器在EOL的构成方面更加自由。

“正确性”是相对的。如果没有MUST或SHOULD条款,那么人们普遍认为“在你所接受的内容中采取自由主义并严格遵守你所发送的内容”是实施RFC时最好的方法。

答案 1 :(得分:3)

IMAP协议要求客户端和服务器使用\ r \ n。 交换行为正确(这不常见)。