我在理解rfc4978時遇到了一些問題。
據我所知,服務器返回OK
包括命令名稱後,所有東西都被壓縮。然而,似乎我誤解了幾件事(因爲[Gmail]/sfgs
沒有重命名,顯然該文件沒有發送)。如何通過Openssl使用imap壓縮與shell中的imap服務器通話?
$ cat deflatecommands /dev/stdin | socat - OPENSSL:imap.googlemail.com:993,compress=none
* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE ENABLE MOVE CONDSTORE ESEARCH UTF8=ACCEPT APPENDLIMIT=35882577 LIST-EXTENDED LIST-STATUS
a001 OK [email protected] authenticated (Success)
a002 OK Success
2016/04/28 21:47:03 socat[16204.25769803872] E SSL_write(): Broken pipe
其中deflatecommands包含:
a001 LOGIN myus.tyer mypassord
a002 COMPRESS DEFLATE
xÚK400VrõsôuUPŠvÏMÌ̉Õ/NK/[email protected]‰— Ô)
其解壓縮,得到:
a001 LOGIN myus.tyer mypassord
a002 COMPRESS DEFLATE
a003 RENAME "[Gmail]/sfgs" "[Gmail]/xxxxxxxxxxx"
deflatecommands
當然的使用未壓縮和壓縮部分crfl
行結尾。
$ openssl zlib a003 > a003.zlib
$ cat a001 a002 a003.zlib > defaltecommands
由於我的連接速度,最後一件事情,沒有任何事情發送之前'a002 OK Success'if打印在屏幕上。 – user2284570
我不確定這會起作用。所有三個命令都將在一個數據包中發送,但服務器在啓用壓縮時可能會刷新輸入緩衝區。您可能需要在壓縮和壓縮命令之間暫停。另外,如果壓縮部分中存在CRLF,那也是一個問題。您需要以二進制模式編輯文件,並確保沒有明文CRLF。 – Max
@Max:''003.zlib'中沒有未壓縮的ᴄʀʟꜰ。再次,沒有任何壓縮的字節在GImap返回「OK成功」之前發送。 – user2284570