Как правильно подключить IMAP с помощью AUTHENTICATE PLAIN? - PullRequest
4 голосов
/ 25 августа 2011

Я использую OpenSSL для подключения к почтовому серверу.

POP3 работает нормально, но у меня проблемы с IMAP.Основанный на команде CAPABILITY сервер поддерживает методы аутентификации PLAIN, NTLM и GSS-API.

Я хочу использовать PLAIN, потому что это проще, чем другие.Я прочитал, что для этого нужно использовать <NUL>.

Я запустил следующие варианты, но безуспешно:

? login user pass
? login <nul>user<nul>pass
? <nul>login <nul>user<nul>pass

Что я делаю не так?

Ответы [ 3 ]

28 голосов
/ 04 января 2013

Ни в одном из предыдущих ответов на самом деле не сказано как использовать аутентификацию PLAIN, поэтому я сделал еще несколько копаний.Оказывается, информация об аутентификации ожидается в base64.Это, вероятно, проще всего объяснить на примере.Предположим, имя пользователя «Боб» и пароль «Манчкин».

Сначала нам нужно кодировать в base64.В системе Linux-ish это выглядит так:

echo -en "\0bob\0munchkin" | base64

Это включает в себя нулевые символы по мере необходимости, а также кодирует base64.Мы получаем эту строку: AGJvYgBtdW5jaGtpbg==.

Теперь мы можем выполнить настоящую аутентификацию (S = Сервер, C = Клиент):

S: * OK The Microsoft Exchange IMAP4 service is ready.
C: D0 CAPABILITY
S: * CAPABILITY IMAP4 IMAP4rev1 AUTH=NTLM AUTH=GSSAPI AUTH=PLAIN CHILDREN IDLE NAMESPACE LITERAL+
S: D0 OK CAPABILITY completed.
C: D1 AUTHENTICATE PLAIN
S: +
C: AGJvYgBtdW5jaGtpbg==
S: D1 OK AUTHENTICATE completed

И вы 'готово!

3 голосов
/ 26 августа 2011
May be this will help

/* RFC 4616.2. PLAIN SASL Mechanism.                
The mechanism consists of a single message, a string of [UTF-8]
encoded [Unicode] characters, from the client to the server.  The
client presents the authorization identity (identity to act as),
followed by a NUL (U+0000) character, followed by the authentication
identity (identity whose password will be used), followed by a NUL
(U+0000) character, followed by the clear-text password.  As with
other SASL mechanisms, the client does not provide an authorization
identity when it wishes the server to derive an identity from the
credentials and use that as the authorization identity.

message = [authzid] UTF8NUL authcid UTF8NUL passwd

Example:
C: a002 AUTHENTICATE "PLAIN"
S: + ""
C: {21}
C: <NUL>tim<NUL>tanstaaftanstaaf
S: a002 OK "Authenticated"
*/


IMAP not easy to code, literal string and xxx response formats ... .
It's easier to use some free IMAP client.
0 голосов
/ 20 января 2012

? войти mymailbox@box.zone mypassword \ r \ n

часто серверам не требуется часть "@ box.zone", вы можете просто ввести логин

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...