@SergioCoder

Как на PHP при OAuth-авторизации в Яндекс.Почте работать по протоколам IMAP и SMTP, используя не пароль, а OAuth-токен?

Сначала описываю ситуацию.
OAuth-токен пользователя получен.
<Команда AUTHENTICATE> (строка, включающая в себя логин, e-mail и OAuth-токен и закодированная методом base64, готова).

А дальше проблема.
В документации (https://yandex.ru/dev/id/doc/dg/imap/index.html ) читаю следующее:

Последовательность запросов и ответов при успешной IMAP-авторизации может выглядеть так:

openssl s_client -connect imap.yandex.com:993 -crlf
<инициализация соединения>

клиент: C01 CAPABILITY

сервер: * CAPABILITY IMAP4rev1 CHILDREN UNSELECT LITERAL+ NAMESPACE XLIST BINARY UIDPLUS ENABLE ID AUTH=PLAIN IDLE MOVE
сервер: C01 OK CAPABILITY Completed.

клиент: A01 AUTHENTICATE XOAUTH2
<Команда AUTHENTICATE>

сервер: * CAPABILITY IMAP4rev1 CHILDREN UNSELECT LITERAL+ NAMESPACE XLIST BINARY UIDPLUS ENABLE ID IDLE MOVE
сервер: A01 OK AUTHENTICATE Completed.

<продолжение работы>

Вопрос: Как мне сделать выполнение этих команд клиента и получение ответов сервера в PHP-скрипте, в Yii2 контроллере?
И дальше <продолжение работы> какими функциями PHP? Стандартные функции PHP типа imap_open, imap_search, imap_body и т.п. требуют в качестве обязательного аргумента пароль, а не OAuth-токен или <Команда AUTHENTICATE>. Ни в документации API Яндекс.Почты ни в Гугле ничего не нашел про реализацию всего этого именно на PHP. Ну и с SMTP аналогично. Очень нужна помощь.
  • Вопрос задан
  • 599 просмотров
Решения вопроса 1
Vamp
@Vamp
Стандартный модуль php_imap не поддерживает XOAUTH2. И, вероятно, никогда не будет поддерживать. Существует план поддержки XOAUTH2, но работа по нему не ведётся.

Вам следует воспользоваться альтернативными реализациями IMAP протокола, поддерживающие XOAUTH2. Например, webklex/php-imap.

С SMTP так же - берите любую библиотеку с поддержкой XOAUTH2.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы