使用IMAP通过IMAP连接到Gmail - SSL上下文失败

Cli*_*ler 20 php ubuntu ssl gmail imap

我正在尝试使用在Apache中运行的PHP通过IMAP连接到Gmail.这是在Ubuntu 9.04系统上.我有一些PHP配置问题,这使得它无法正常工作.首先,这是我为PHP设置IMAP所做的工作:

sudo apt-get install libc-client2007b libc-client2007b-dev
sudo apt-get install php5-imap
sudo /etc/init.d/apache2 start
Run Code Online (Sandbox Code Playgroud)

当我运行phpinfo()时,我得到以下imap值:

IMAP c-Client Version: 2004
SSL Support: enabled
Kerberos Support: enabled
Run Code Online (Sandbox Code Playgroud)

这是我的示例代码:

<?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);
?>
Run Code Online (Sandbox Code Playgroud)

当我执行此代码时,我得到以下输出:

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
Run Code Online (Sandbox Code Playgroud)

请注意,我可以从这台计算机telnet到imap.gmail.com:993.我还可以通过IMAP将Evolution(邮件阅读器)连接到Gmail并毫无问题地获取邮件.所以,我认为这不是防火墙问题.我很确定我在PHP中没有正确设置.

有任何想法吗?

Jor*_*nes 11

您需要在PHP中启用的另一项功能是OpenSSL扩展.似乎IMAP客户端库(使用SSL)依赖于此.

Apache是​​否启用了OpenSSL模块并不重要,因为在将请求传递给PHP之前对其进行处理/处理.

以下讨论主题可能有助于解释一些问题:

http://groups.google.com/group/comp.lang.php/browse_thread/thread/241e619bc70a8bf4/bd3ae0c6a82409bc?lnk=raot&pli=1

  • 我收到了类似的警告.你是怎么解决它的人 我的服务器上启用了OpenSSL. (2认同)

小智 9

经过长时间的努力,这对我有用:

$ServerName = "{imap.gmail.com:993/imap/ssl/novalidate-cert/norsh}Inbox";
Run Code Online (Sandbox Code Playgroud)


Adn*_*mad 8

我遇到了同样的问题.我正在使用Windows和wamp,我的wamp"openSSl"扩展已启用.

我通过使用以下步骤删除了此问题.我希望这也适合您.

1)通过浏览器登录到Gmail帐户.

2)打开此网址" 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);


?>
Run Code Online (Sandbox Code Playgroud)

最好的运气.:)