Обходной путь для PHP IMAP? Попытка работать с входящей электронной почтой на localhost с помощью XAMPP

В проекте, над которым я сейчас работаю, я пытаюсь добавить функциональность, в которой я могу изменить статус билета с «закрытого» на «вновь открыт», когда пользователь отправляет электронное письмо в службу поддержки. Я также хотел бы сохранить их ответ электронной почты в базу данных.

Проблема, с которой я сталкиваюсь, заключается в том, что я не могу заставить функции IMAP PHP работать с моей текущей конфигурацией Apache. От взгляда на довольно много сообщений здесь, в stackoverflow и других местах, кажется, что проблема в OpenSSL не включена в стандартной конфигурации. Так, например, когда я запускаю этот код:

<h1>IMAP testing!</h1> <?php $connect = "{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX"; $user = "my email address @gmail.com"; $pass = "my password"; $mailbox = imap_open($connect, $user, $pass); ?> 

Я получаю сообщение об ошибке:

 Can't open mailbox {imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX: invalid remote specification. 

Есть ли что-нибудь, что я могу сделать, за исключением перекомпиляции PHP, чтобы имитировать IMAP-функции на моей локальной машине, чтобы иметь возможность продолжать развивать функциональность работы с электронной почтой (электронная почта)?

Некоторые заметки о моей текущей конфигурации, на всякий случай, это помогает:

  • OS X 10.7.4
  • PHP v.5.3.1

ОБНОВИТЬ –

Я почти там (спасибо dAm2K)!

Я установил Stunnel (используя Mac-порты), все сконфигурировало окончательно и выполнил команду:

 sudo stunnel /opt/local/etc/stunnel/stunnel.conf -c -d 127.0.0.1:443 -r imap.gmail.com:993 

(По какой-то причине мне пришлось добавить путь к файлу .conf)

Теперь мой код выглядит так:

 <?php $connect = "{localhost:443}INBOX"; $user = "my email address @gmail.com"; $pass = "my password"; $mailbox = imap_open($connect, $user, $pass); ?> 

Теперь, когда я загружаю страницу, она просто зависает в течение 30 секунд или около того и выдает предупреждение:

 Notice: Unknown: Connection failed to localhost,443: Operation timed out (errflg=2) in Unknown on line 0 

Интересно, что если я изменю $ connect на:

 $connect = "{localhost:443/ssl}INBOX"; 

или

 $connect = "{localhost:443/novalidate-cert}INBOX"; 

Я получаю исходную ошибку, которая была:

 Notice: Unknown: Can't open mailbox {localhost:443/novalidate-cert}INBOX: invalid remote specification (errflg=2) in Unknown on line 0 

Есть идеи? Просто догадаться, но может ли это быть чем-то связанным с установкой stunnel, например, с самозаверяющим сертификатом или чем-то с файлом stunnel.conf, который мне не хватает?

Большое спасибо.

Тим

Вероятно, у вас есть брандмауэр, который блокирует исходящие пакеты TCP, идущие на imap.gmail.com на порт 993.

Попросите своего сисадмина проверить исходящий TCP на dport 993 (imaps). Также проверьте, разрешает ли ваш DNS-сервер imap.gmail.com:

Команда:

 telnet imap.gmail.com 993 

должен предоставить вам действительное соединение. Если это не удается, вы нашли проблему.

Возможно, вы захотите установить IMAP-сервер на своей машине разработки, чтобы продолжить разработку в автономном режиме … вы можете установить пакет «courier imap», но это не очень простая задача …

Если соединение выполнено и команда:

 openssl s_client -connect imap.gmail.com:993 

дайте вам правильное соединение, проблема может заключаться в том, что ваш libc-клиент не имеет поддержки SSL, скомпилированной в. В этом случае вы не можете использовать imaps с PHP, и вы можете использовать команду «stunnel» для пересылки четкого трафика, исходящего из вашего локальная машина, зашифрованная на серверах IMAP на gmail.

Команда:

 stunnel -c -d 127.0.0.1:443 -r imap.gmail.com:993 

должен сделать трюк. Таким образом, вы можете подключить свой PHP-скрипт к 127.0.0.1:443:

 <? $connect = "{localhost:443}INBOX"; ?>