невозможно включить imap через токен доступа - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь получить доступ к Gmail IMAP через токен доступа от входа в систему. Я передаю токен бэкэнду, но он показывает username and password are not accepted Front End, используя реагировать:

const {name,email,message,accessToken} = this.state;
    const form = await Axios.post("/api/form",{
      name,
      email,
      message,
      accessToken
    });

бэкэнд, используя nodejs:

var imap = new Imap({
        user: 'SMTH@gmail.com',
        host: 'imap.gmail.com',
        xoauth2 :request.body.accessToken,
        port: 993,
        tls: true,
    });

1 Ответ

0 голосов
/ 14 апреля 2020

Не зная, какую конкретно библиотеку IMAP вы используете, помните следующее:

  • вы должны специально запросить область действия mail.google.com, чтобы получить доступ к электронной почте пользователя
  • большинство * IMAP-клиентов на JS основе (за исключением нескольких, таких как email js -imap-client) не выполняют автоматическое кодирование токена XOAUTH для вас, и вам нужно будет сделать это вручную, для этого это: user={email}^Aauth=Bearer {token}^A^A. Чтобы получить токен ^A в javascript, вы можете использовать \u0001 следующим образом:
const xoauth2 = `user=${email}\u0001auth=Bearer ${accessToken}\u0001\u0001`

Имейте в виду, что вам также нужно будет закодировать это base64 перед отправкой на сервер, например Итак:

btoa(xoauth2)

Вы также можете проверить правильность своих учетных данных через IMAP. Для подключения используйте следующую команду от клиента bash с установленным openSSL:

openssl s_client -connect imap.gmail.com:993 -crlf

Это откроет сеанс IMAP, где вы можете затем отправлять команды. Пример входа через XOAUTH2 (используя закодированную форму base64, приведенную выше):

? AUTHENTICATE XOAUTH2 dXNlcj1zb21ldGhpbmdAZ21haWwuY29tAWF1dGg9QmVhcmVyIHNvbWVfYWNjZXNzX3Rva2VuAQE=

Сервер ответит OK и сообщением, если ваши учетные данные верны.

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