сервер обмена — PHP imap_open работает на 7.0.6, но не на 5.4.16

Итак, у меня есть общая / прикладная / системная учетная запись (терминология варьируется), которая имеет доступ к нескольким почтовым ящикам. Я использую имя пользователя в формате <domain>/<username>/<mailbox> и это единственная «необычная» вещь. Следующая строка работает на PHP 7.0.6 (мой ноутбук), но не на 5.4.16 (сервер dev):

$mbox = imap_open("<host>:993/ssl/novalidate-cert",
"<domain>/<username>/<mailbox>", <pass>,
NULL, array('DISABLE_AUTHENTICATOR' => 'GSSAPI'));

Я получаю ошибку:

Примечание PHP: Неизвестно: Не удается пройти проверку подлинности на сервере IMAP: Ошибка AUTHENTICATE. (errflg = 2) в Неизвестно в строке 0

Что я пробовал:

  • Оригинальная учетная запись почтовых ящиков (имя пользователя в <domain>/<user> формат) который работает
  • С помощью /debug в $mailbox а также OP_DEBUG флаг — ни один из которых не сделал ничего полезного
  • Отладка сообщений на сервер с использованием python. Это подтверждает, что имя пользователя отправляется как трехсегментная строка, а также работает
  • Удаление 3-го сегмента (почтовый ящик), думая, что я могу выбрать его позже — приводит к ошибке аутентификации в обоих случаях / версиях

Вопросы:

  1. Это ошибка PHP?
  2. Есть ли другой способ сделать это? (Я не могу изменить версию PHP)
  3. Можно ли как-то включить ведение журнала сообщений? (нет рута, поэтому нет опции tcpdump)

4

Решение

На мой взгляд, вы можете попробовать сделать что-то вроде этого:

$mbox = imap_open("<host>:993/ssl/novalidate-cert",
"<domain>/<username>/<mailbox>", <pass>,
NULL, array('DISABLE_AUTHENTICATOR' => 'GSSAPI')) or
die(var_dump(imap_errors()));

Вы должны увидеть больше ошибок. Далее вы можете переключиться на PLAIN вместо GSSAPI и, возможно, попытаться установить для n_retries значение 1 и, наконец, подумать, добавить флаг об IMAP.

$mbox = imap_open("<host>:993/imap/ssl/novalidate-cert",
"<domain>/<username>/<mailbox>", <pass>,
NULL,  1, array('DISABLE_AUTHENTICATOR' => 'PLAIN')) or
die(var_dump(imap_errors()));

Я думаю, что есть проблема с Exchange, который не разрешает протоколы аутентификации, которые он не поддерживает. Если вы запускаете его на win, и он работает, а ваша среда разработки работает на Linux, я почти уверен, что это та проблема.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]