Я пытаюсь подключиться к Gmail через IMAP с PHP, работающим в Apache. Это находится на системе Ubuntu 9.04. У меня есть какая-то проблема с настройкой PHP, которая не позволяет этому работать. Во-первых, вот что я сделал для настройки IMAP для PHP:
sudo apt-get install libc-client2007b libc-client2007b-dev sudo apt-get install php5-imap sudo /etc/init.d/apache2 start
Когда я запускаю phpinfo (), я получаю следующие значения imap:
IMAP c-Client Version: 2004 SSL Support: enabled Kerberos Support: enabled
Вот мой пример кода:
<?php $connect_to = '{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX'; $user = 'my gmail address'; $password = 'my gmail password'; $connection = imap_open($connect_to, $user, $password) or die("Can't connect to '$connect_to': " . imap_last_error()); imap_close($connection); ?>
Когда я выполняю этот код, я получаю следующий вывод:
Warning: imap_open() [function.imap-open]: Couldn't open stream {imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX in /var/www/clint/gmail/gmail.php on line 10 Can't connect to '{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX': TLS/SSL failure for imap.gmail.com: SSL context failed
Обратите внимание, что я могу использовать telnet для imap.gmail.com:993 с этого компьютера. Я также могу подключить Evolution (mail reader) к Gmail через IMAP и получать почту без проблем. Итак, я не думаю, что это проблема межсетевого экрана. Я уверен, что у меня есть что-то в PHP, неправильно настроенное.
Есть идеи?
Еще одна дополнительная вещь, которую нужно включить в PHP, – это расширение OpenSSL . Похоже, от этого зависит библиотека клиента IMAP (с SSL).
Не имеет значения, включен ли Apache модуль OpenSSL, поскольку он обрабатывается / обрабатывается до того, как запрос передается на PHP.
Следующая дискуссия может помочь пролить свет:
Это сработало для меня после долгих усилий:
$ServerName = "{imap.gmail.com:993/imap/ssl/novalidate-cert/norsh}Inbox";
Я столкнулся с такой же проблемой. Я использую windows и wamp, а расширение wash open Open открыто.
Я удалил эту проблему, используя следующие шаги. Я надеюсь, что это сработает и для вас.
1) Вход в систему через браузер для учетной записи gmail.
2) Откройте этот URL-адрес « https://www.google.com/settings/security/lesssecureapps »
3) Нажмите «Включить»,
4) попробуйте следующий код
<?php set_time_limit(4000); // Connect to gmail //$imapPath = '{imap.gmail.com:993/imap/ssl}INBOX'; $imapPath = '{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX'; $username = 'your-emai-address@gmail.com'; $password = 'Your-password'; // try to connect $inbox = imap_open($imapPath,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error()); /* ALL - return all messages matching the rest of the criteria ANSWERED - match messages with the \\ANSWERED flag set BCC "string" - match messages with "string" in the Bcc: field BEFORE "date" - match messages with Date: before "date" BODY "string" - match messages with "string" in the body of the message CC "string" - match messages with "string" in the Cc: field DELETED - match deleted messages FLAGGED - match messages with the \\FLAGGED (sometimes referred to as Important or Urgent) flag set FROM "string" - match messages with "string" in the From: field KEYWORD "string" - match messages with "string" as a keyword NEW - match new messages OLD - match old messages ON "date" - match messages with Date: matching "date" RECENT - match messages with the \\RECENT flag set SEEN - match messages that have been read (the \\SEEN flag is set) SINCE "date" - match messages with Date: after "date" SUBJECT "string" - match messages with "string" in the Subject: TEXT "string" - match messages with text "string" TO "string" - match messages with "string" in the To: UNANSWERED - match messages that have not been answered UNDELETED - match messages that are not deleted UNFLAGGED - match messages that are not flagged UNKEYWORD "string" - match messages that do not have the keyword "string" UNSEEN - match messages which have not been read yet*/ // search and get unseen emails, function will return email ids $emails = imap_search($inbox,'UNSEEN'); $output = ''; foreach($emails as $mail) { $headerInfo = imap_headerinfo($inbox,$mail); $output .= $headerInfo->subject.'<br/>'; $output .= $headerInfo->toaddress.'<br/>'; $output .= $headerInfo->date.'<br/>'; $output .= $headerInfo->fromaddress.'<br/>'; $output .= $headerInfo->reply_toaddress.'<br/>'; $emailStructure = imap_fetchstructure($inbox,$mail); //var_dump($emailStructure->parts); if(isset($emailStructure->parts)) { $output .= imap_body($inbox, $mail, FT_PEEK); } else { // } echo $output; $output = ''; } // colse the connection imap_expunge($inbox); imap_close($inbox); ?>
УДАЧИ. 🙂
была та же проблема с личным доменом в приложениях Google. Проблема была решена путем изменения доступа к учетной записи. Просто следуйте по ссылке и включите доступ к учетной записи.
Запустите свой код из командной строки и посмотрите, сбрасывает ли php наши другие ошибки:
php -f gmail.php
На моем Ubuntu я сделал:
sudo apt-get install php5-imap
И установлена система: libc-client2007b mlock libc-client2007b mlock php5-imap
Затем о том, как удалить php5 и переустановить его.
Проверьте свою настройку с помощью phpinfo()
и убедитесь, что вы видите --with-imap-ssl
.
Если у вас все еще есть проблемы с этим в gmail, включите «Разрешить доступ для менее безопасных приложений» на странице настроек безопасности учетных записей Google.
Во-первых, включите менее безопасные приложения в своей учетной записи Gmail: https://myaccount.google.com/lesssecureapps
Используйте эту конфигурацию для создания IMAP-соединения:
$imap_connection = imap_open('{imap.gmail.com:993/imap/ssl/novalidate- cert}INBOX', 'YOUR GMAIL USER', 'YOUR GMAIL PASSWORD');
Примечание . INBOX – это ваш главный ящик, например, вы можете получить доступ к сообщениям с помощью: INBOX.Sent в вашем соединении.