如何使用PHP IMAP从Gmail服务器读取邮件

3

我正在尝试使用PHP IMAP从Gmail服务器读取所有电子邮件。

我的配置如下:

$hostname = '{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX';
$username = 'email';
$password = 'pass';

$inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error());

var_dump($inbox);exit;

我收到了PHP警告和提示:

imap_open():无法打开流{imap.gmail.com:995/imap/ssl/novalidate-cert}INBOX

未知错误:无法连接到imap.gmail.com,993:超时(errflg=2),位于未知行0

请帮忙解决。

1个回答

5
set_time_limit(4000); 

// Connect to gmail
$imapPath = '{imap.gmail.com:993/imap/ssl}INBOX';
$username = 'your_email_id@gmail.com';
$password = 'your_gmail_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);

    if(!isset($emailStructure->parts)) {
         $output .= imap_body($inbox, $mail, FT_PEEK); 
    } else {
        //    
    }
   echo $output;
   $output = '';
}

// colse the connection
imap_expunge($inbox);
imap_close($inbox);

如果要使用这个功能,您需要安装并启用php5-imap

您可以使用以下命令安装PHP5 IMAP模块:

apt-get install php5-imap

然而,默认情况下它是未启用的,因此请使用以下命令启用:

php5enmod imap

要查看更改,请重新启动Apache

service apache2 restart

对于使用Xampp7及以上版本的Windows系统,

请前往php.ini文件,

删除分号即可。

;extension=imap

1
我已经使用以下命令安装了IMAP模块: sudo apt-get install php7.0-imap但不幸的是,我仍然看到这个问题。 - Hayk Hovhannisyan
1
注意:未知错误:在第0行上重试PLAIN身份验证后[ALERT]请通过您的Web浏览器登录:https://support.google.com/mail/acco(errflg = 1)注意:未知错误:无法对IMAP服务器进行身份验证:[ALERT]请通过您的Web浏览器登录:https://support.google.com/mail/acco(errflg = 2)在第0行上。 - Hayk Hovhannisyan
我猜你在谷歌邮件设置中禁用了IMAP,你需要在Gmail设置中启用它。 https://productforums.google.com/forum/#!topic/gmail/7GAYebM4HbM如果你开启了两步验证,那么你需要再次登录谷歌进行验证。 - Abhinav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接