我正在尝试使用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命令。
答案 0 :(得分:7)
它位于RFC3501的section 2.2中,但这是概述的一部分。
客户端和服务器传输的所有交互都是行的形式,即以CRLF结尾的字符串。
请注意,条款中没有“必须”。
Dovecot和其他IMAP服务器在EOL的构成方面更加自由。
“正确性”是相对的。如果没有MUST或SHOULD条款,那么人们普遍认为“在你所接受的内容中采取自由主义并严格遵守你所发送的内容”是实施RFC时最好的方法。
答案 1 :(得分:3)
IMAP协议要求客户端和服务器使用\ r \ n。 交换行为正确(这不常见)。