Как защитить открытое соединение imap


Я использую 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=ОБЫЧНЫЙ (errflg=1) в неизвестном в строке 0

Я искал на php.net и часами гуглил, но не мог найти решения, как от этого избавиться.

Единственное, что я обнаружил, также не сработало: добавление /защита в имя сервера.

$pop3conn  = imap_open('{localhost:110/pop3/secure}', MAILLOGIN, MAILPWD);

Затем я получаю:

Примечание: Неизвестно: Не удается выполнить безопасную аутентификацию с помощью этого сервера (errflg=2) в неизвестном в строке 0

Заранее спасибо за любую помощь!

 2
Author: Shankar Damodaran, 2012-01-27

3 answers

Я немного удивлен, что это дает вам in Unknown on line 0, поскольку обычно это происходит только тогда, когда ошибка возникает до того, как скрипт начнет выполняться - однако единственным реальным решением этой проблемы является скрытие ошибок PHP.

Похоже, что сервер, к которому вы подключаетесь, не поддерживает безопасную аутентификацию, и единственное решение этой проблемы - попросить администратора сервера поддержать ее. Или использовать другой сервер. В своем коде вы ничего не можете сделать, чтобы обойти это особая проблема, поэтому вам просто придется обработать ошибку вместо того, чтобы пытаться ее исправить (как бы я ни ненавидел рекомендовать этот подход кому-либо для чего-либо).

Вы можете обнаружить, что даже вызов ini_set('display_errors', 0) или использование оператора evil @ не исправит этого, так как это in Unknown on line 0 - хотя вы все равно не должны показывать ошибки PHP в производственной среде. Вы должны убедиться, что ваш php.ini в рабочей среде настроен так, чтобы скрывать ошибки от пользователя.

 1
Author: DaveRandom, 2012-01-27 14:42:45

На самом деле это не поддельное сообщение, это просто означает, что это незашифрованное соединение с открытым текстом. Вот как вы можете это сделать:

$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');
}
 2
Author: Thierry Daguin, 2013-08-20 09:35:48

Вопросу несколько лет, но я столкнулся с той же проблемой:

imap_open("{imap.domain.com:143}INBOX", 'username', 'password');

Приводит меня к ошибке 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 больше не сообщает об ошибках.

 1
Author: ino, 2017-12-10 11:55:26