Я использую imap_open (), чтобы установить соединение с моим почтовым сервером для проверки возвращенных писем.
$pop3conn = imap_open('{localhost:110/pop3}', MAILLOGIN, MAILPWD); if($pop3conn == false) echo'<br />no conn'; else { // check mail headers and bodies }
Я получаю сообщение PHP о небезопасной аутентификации:
Примечание: Неизвестно: ПРОБЛЕМА БЕЗОПАСНОСТИ: небезопасный сервер рекламируется AUTH = PLAIN (errflg = 1) в Unknown в строке 0
Я искал на php.net и работал в Интернете в течение нескольких часов, но не могу найти решение, как избавиться от этого.
единственное, что я нашел, тоже не работает: добавление / защита для имени сервера.
$pop3conn = imap_open('{localhost:110/pop3/secure}', MAILLOGIN, MAILPWD);
то я получаю:
Примечание: Неизвестно: не удается выполнить безопасную проверку подлинности на этом сервере (errflg = 2) в Unknown в строке 0
Заранее благодарю за любую помощь!
Я немного удивлен, что это дает вам сообщение in Unknown on line 0
как это обычно происходит, когда возникает ошибка, прежде чем скрипт начнет выполнение. Однако единственным реальным решением этой проблемы является скрыть ошибки PHP.
Похоже, что сервер, к которому вы подключаетесь, не поддерживает безопасную проверку подлинности, и единственным решением для этого является попросить администратора сервера поддержать его. Или использовать другой сервер. Вы ничего не можете сделать в своем коде, чтобы обойти эту конкретную проблему, поэтому вам просто придется обрабатывать эту ошибку, а не пытаться ее исправить (насколько мне не нравится рекомендовать этот подход кому-либо для чего-либо).
Вы можете обнаружить, что даже вызов ini_set('display_errors', 0)
или использование злого оператора @
не будет исправлять это, поскольку он находится in Unknown on line 0
хотя вы все равно не должны показывать ошибки PHP в рабочей среде. Вы должны убедиться, что ваш php.ini в производстве настроен на скрытие ошибок пользователя.
На самом деле это не фальшивое сообщение, а просто означает, что это незашифрованное соединение с открытым текстом. Вот как вы можете это сделать:
$error = imap_errors(); if (count($error) > 1 || $error[0] != 'SECURITY PROBLEM: insecure server advertised AUTH=PLAIN') { // More than 1 error or not the expected error var_dump($error); throw new Exception('IMAP error detected'); }
Вопрос несколько лет, но я столкнулся с той же проблемой:
imap_open("{imap.domain.com:143}INBOX", 'username', 'password');
gaves me error SECURITY PROBLEM: insecure server advertised AUTH=PLAIN
.
Итак, в нем говорится, что я отправляю учетные данные незащищенным. Все, что мне нужно было сделать, – это обратиться к моему почтовому провайдеру, чтобы узнать, как безопасно подключаться.
Стандартные порты:
Protocol Unsecured Secured POP3 110 995 (SSL, TLS) IMAP4 143 993 (SSL, TLS) SMTP 25 465 (SSL), 587 (TLS, STARTTLS)
И согласно документации PHP-функции imap_open () я изменил следующие параметры:
imap_open("{imap.domain.com:993/imap/ssl}INBOX", 'username', 'password');
Итак, теперь у меня есть связь зашифрована / защищена, и PHP больше не сообщает об ошибках.