使用PHP获取未读电子邮件数量

时间:2012-04-27 05:08:54

标签: php email count imap

我的需要: 我希望在我的GMail帐户(或任何其他电子邮件服务)中获取未读电子邮件的数量,在我得到之后,我需要将其显示在我本地PHP服务器的网页上。所以我需要一种脚本语言,即PHP。但我尝试了很多例子,但似乎都没有。基本上我想要的是一个PHP脚本,可以访问我的GMail帐户并将未读电子邮件的数量返回到网页

我徒劳地试过这个脚本,它总是在我的网页上显示“错误”。

<?php

function CountUnreadMail($host, $login, $passwd) {
    $mbox = imap_open($host, $login, $passwd);
    $count = 0;
    if (!$mbox) {
        echo "Error";
    } else {
        $headers = imap_headers($mbox);
        foreach ($headers as $mail) {
            $flags = substr($mail, 0, 4);
            $isunr = (strpos($flags, "U") !== false);
            if ($isunr)
            $count++;
        }
    }

    imap_close($mbox);
    return $count;
}

$hostname = '{imap.gmail.com:993/imap/ssl}INBOX';
$username = 'username';
$password = 'password';

$count = CountUnreadMail($hostname, $username, $password);

?>

Chris帮助时,我尝试了这个脚本,但我看到的唯一一个是空白页面。这是另一个我徒劳无功的脚本:

<?php

function mailCount($host, $login, $passwd) {
    $mbox = imap_open($host, $login, $passwd);
    $mail = '';

    if($mail = imap_check($mbox)) {
        return $mail->Nmsgs;
    }
}

$hostname = '{imap.gmail.com:993/imap/ssl}INBOX';
$username = 'phpimap123'; //GMail username
$password = 'phptesting'; //Password

$count = mailCount($hostname, $username, $password);

echo $count;

?

PS:我已经为测试目的创建了一个GMail帐户。

我在MacBook Air上运行Mac OS X Lion。启用PHP并运行,我也有MAMP,它也在运行。

3 个答案:

答案 0 :(得分:3)

如果您是通过IMAP进行的,为什么不使用:

function mailCount($host, $login, $passwd)
{
    $mbox = imap_open($host, $login, $passwd);
    $mail = '';

    if($mail = imap_check($mbox))
    {
        return $mail->Nmsgs;
    }
}

$hostname = '{imap.gmail.com:993/imap/ssl}INBOX';
$username = 'username';
$password = 'password';

$count = mailCount($hostname, $username, $password);

这将为您提供未读邮件计数。

答案 1 :(得分:1)

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

imap_check 会为您提供:日期,驱动程序,邮箱,Nmsgs,最近 Nmsgs =总消息,最近 =这不是未读数但是最近的数据)

答案 2 :(得分:0)

尝试将if (!$mbox)替换为if ($mbox === FALSE)

您应该进行特定的类型检查,以这种方式测试句柄是不好的做法。

另外,请尝试通过gmail.com登录您的帐户。您可能有太多无效尝试,Gmail希望您先输入验证码,但这不能通过IMAP完成。