2013-12-04 1 views
2

Я должен сделать pop3-сервер в bash, и у меня возникла проблема с командой LIST. Я могу подключиться к своему серверу, выполнить некоторую команду, но когда LIST вызывает мой клиент, подождите много времени. Вероятно, он ждет другого входа, но я не вижу, что я делаю неправильно.Команда LIST в Pop3 server-like

Я следовать RFC 1939:

C: LIST 
S: +OK 2 messages (320 octets) 
S: 1 120 
S: 2 200 
S: . 

Моя минимальная реализация:

[...] 
"STAT"*) 
    echo "+OK 1 3" 
    ;; 
"LIST"*) 
    echo "+OK 1 messages (3 octets)"  
    echo "1 3" 
    echo "." 
    ;; 
[...] 

Claws Mail Вход:

* Account '[email protected]': Connecting to POP3 server: localhost... 
[18:02:42] POP3< +OK 
[18:02:42] POP3> USER root 
[18:02:42] POP3< +OK USER 
[18:02:42] POP3> PASS ******** 
[18:02:42] POP3< +OK PASS 
[18:02:42] POP3> STAT 
[18:02:42] POP3< +OK 1 3 
[18:02:42] POP3> UIDL 
[18:02:42] POP3< -ERR 'UIDL 
' n'est pas une commande valide 
** command not supported 
[18:02:42] POP3> LAST 
[18:02:42] POP3< -ERR 'LAST 
' n'est pas une commande valide 
** command not supported 
[18:02:42] POP3> LIST 
[18:02:42] POP3< +OK 1 messages (3 octets) 
// HERE WAIT A LONG LONG TIME // 
** Session timed out. You may be able to recover by increasing the timeout value in Preferences/Other/Miscellaneous. 

Спасибо.

ответ

3

Постарайтесь, чтобы каждая строка ваших ответов заканчивалась CRLF, а не только LF. Может быть, только команды, ожидающие многострочного ответа, настаивают на том, чтобы видеть .CRLF, а не только .LF.

[...] 
"STAT"*) 
    printf "+OK 1 3\r\n" 
    ;; 
"LIST"*) 
    printf "+OK 1 messages (3 octets)\r\n" 
    printf "1 3\r\n" 
    printf ".\r\n" 
;; 
[...] 
+0

Это право;) Большое спасибо и приятный день. – Oyabi