【问题标题】:How to read emails from Gmail server by PHP IMAP如何通过 PHP IMAP 从 Gmail 服务器读取电子邮件
【发布时间】:2018-10-15 11:18:11
【问题描述】:

我正在尝试使用 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}收件箱

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

请帮忙

【问题讨论】:

    标签: php email gmail amazon imap


    【解决方案1】:
    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
    

    【讨论】:

    • 我已经用这个命令安装了 IMAP 模块:sudo apt-get install php7.0-imap 但不幸的是我仍然看到这个问题。
    • 注意:Unknown: Retrying PLAIN authentication after [ALERT] 请通过您的网络浏览器登录:support.google.com/mail/acco (errflg=1) in Unknown on line 0 注意:Unknown: Retrying PLAIN authentication after [ALERT] ] 请通过网络浏览器登录:support.google.com/mail/acco (errflg=1) in Unknown on line 0 注意:未知:无法对 IMAP 服务器进行身份验证:[ALERT] 请通过网络浏览器登录:support.google.com/mail/acco (errflg= 2) 在第 0 行的未知中
    • 我猜你在谷歌邮件设置中禁用了 imap。您需要在 gmail 设置中启用它。 productforums.google.com/forum/#!topic/gmail/7GAYebM4HbM如果你有两步验证,那么你需要再次登录谷歌来验证
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 2010-12-06
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 2023-03-25
    相关资源
    最近更新 更多