Вопрос по email, php – Обходной путь для функций PHP IMAP? Попытка работать с входящей электронной почтой на localhost с помощью XAMPP

2

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

Проблема, с которой я сталкиваюсь, заключается в том, что я не могу заставить функции PHP IMAP работать в моей текущей конфигурации 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, который мне не хватает?

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

Тим

Спасибо за совет, но я уверен, что это проблема с конфигурацией Apache. Я попробовал кстати и без изменений, все та же ошибка. BigHeadCreations
@pogo Извините, нет, вскоре я перешел на Ubuntu, и у меня больше не было этой проблемы. Сожалею. BigHeadCreations
Вам удалось найти решение для этого? Я получаю те же ошибки с stunnel. pogo
Может быть, порт 993 теперь открыт в вашем брандмауэре, попробуйте выполнить простой код php на localmachine, вставив php с помощью ssl Sergey
Попробуйте $ connect = & quot; {imap.gmail.com:993/ssl/novalidate-cert} INBOX & quot ;; (удалить / imap /) Sergey

Ваш Ответ

1   ответ
1

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

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

Команда:

telnet imap.gmail.com 993

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

, вы захотите установить сервер IMAP на свою машину для разработки, чтобы продолжить разработку в автономном режиме ... вы можете установить & quot; courier imap & quot; пакет, но это не очень простая задача ...

Если соединение установлено и команда:

openssl s_client -connect imap.gmail.com:993

При правильном подключении проблема может заключаться в том, что ваш libc-клиент не имеет встроенной поддержки SSL. В этом случае вы не можете использовать imaps с PHP, и вы можете использовать & quot; stunnel & quot; команда для пересылки чистого трафика, исходящего с вашего локального компьютера, зашифрованного на серверы 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";
?>
Проверьте на gmail.com - аккаунт гугл это IMAP ОТКРЫТ в настройках? Сегодня я создаю новую учетную запись, это был IMAP выключен.
ХОРОШО. Прочитайте мой отредактированный ответ. Вы можете решить свою проблему, используя команду stunnel. Я - пользователь Linux, я действительно не знаю, в порядке ли stunnel на osx ...
Я работаю из дома, поэтому я думаю, что я сисадмин :). Извините, но я не уверен, как проверить исходящий TCP на dport 993 или узнать, разрешается ли DNS для imap.gmail.com. Любые советы по этому поводу? Команда: telnet imap.gmail.com 993 возвращает: Подключено к gmail-imap.l.google.com. BigHeadCreations
ОК, значит, связь работает. Не эксперт по OSX, но проверьте эту команду: openssl s_client -connect imap.gmail.com:993
Error: User Rate Limit Exceeded BigHeadCreations

Похожие вопросы