В проекте, над которым я сейчас работаю, я пытаюсь добавить функциональность, в которой я могу изменить статус билета с «закрытого» на «вновь открыт», когда пользователь отправляет электронное письмо в службу поддержки. Я также хотел бы сохранить их ответ электронной почты в базу данных.
Проблема, с которой я сталкиваюсь, заключается в том, что я не могу заставить функции 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-функции на моей локальной машине, чтобы иметь возможность продолжать развивать функциональность работы с электронной почтой (электронная почта)?
Некоторые заметки о моей текущей конфигурации, на всякий случай, это помогает:
ОБНОВИТЬ –
Я почти там (спасибо 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"; ?>