首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在PHP中使用IMAP ()来获取最近未读电子邮件的计数

在PHP中使用IMAP ()来获取最近未读电子邮件的计数
EN

Stack Overflow用户
提问于 2011-09-09 22:19:57
回答 2查看 14.2K关注 0票数 4

我正在试着得到不。对于最近来自gmail account.For的未读邮件,我已经在我的Ubuntu系统中安装了IMAP,并尝试了一些PHP iMAP函数。以下是我到目前为止所尝试的内容。

代码语言:javascript
运行
复制
/* connect to gmail */
$hostname = '{imap.gmail.com:993/imap/ssl}INBOX';
$username = 'user@gmail.com';
$password = 'user_password';

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

现在,我将陈述我所有的尝试。注意-我已经通过向测试电子邮件id发送新邮件来尝试每一次尝试

Attempt_1:使用imap_search()

代码语言:javascript
运行
复制
$recent_emails = imap_search($inbox,'RECENT');
if ($recent_emails)
   echo count($recent_emails);
else
   echo "false return";
imap_close($inbox);

现在Attempt_1的输出是"false return";

Attempt_2:使用imap_mailboxmsginfo()

代码语言:javascript
运行
复制
$check = imap_mailboxmsginfo($inbox);
if ($check)
    echo "Recent: "   . $check->Recent  . "<br />\n" ;
else
    echo "imap_check() failed: " . imap_last_error() . "<br />\n";
imap_close($inbox);

这里的输出是最近的:0,而我已经向这个id发送了2封新邮件

Attempt_3:使用imap_status()

代码语言:javascript
运行
复制
$status = imap_status($inbox, $hostname, SA_ALL);
if ($status)
  echo "Recent:     " . $status->recent      . "<br />\n";
else
  echo "imap_status failed: " . imap_last_error() . "\n";

//最近的输出:0

Attempt_4:通过参数Attempt_4再次使用imap_search()

代码语言:javascript
运行
复制
$recent_emails = imap_search($inbox,'NEW');
if ($recent_emails)
   echo count($recent_emails);
else
   echo "false return";
imap_close($inbox);

输出- false返回

那么,我哪里错了?如何计算最近未读的电子邮件?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-11 10:38:00

此函数似乎起作用了:

代码语言:javascript
运行
复制
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;
}

使用:

代码语言:javascript
运行
复制
$hostname = '{imap.gmail.com:993/imap/ssl}INBOX';
$username = 'user@gmail.com';
$password = 'user_password';

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

我不能把这个功能完全归功于它。这是sdolgy对PHP Displaying unread mail count的回答的略微编辑的版本。他的版本假设是流行邮件。此版本需要完整的$hostname。我用我自己的gmail账户测试了它,它正确地报告了我收件箱中未读邮件的数量。

PHP Displaying unread mail count有一些非常好的阅读材料。看看这个。

希望这能有所帮助。

更新

来自:Does Gmail support all IMAP features?

Gmail IMAP1是一个相当完整的IMAP实现,但目前不支持以下功能:

\邮件上的最新标志。

验证地址:Gmail's Buggy IMAP Implementation

Gmail不处理标准的IMAP标志,如“\已删除”、“\已应答”和“\最近”。

另请参阅: Jyoti Ranjan's answer (如下所示)以获取可能的解决方案。

票数 6
EN

Stack Overflow用户

发布于 2011-09-16 15:20:15

我已经用数据库解决了这个问题,这就是我所做的。

1.我在users表中为ex- 'email_max_uid‘INT(11) NOT NULL设置了一列,默认为0

2.当用户第一次加载此页面时,使用我的sql查询检索到该特定用户的'email_max_uid‘值。3.自动连接到他的gmail帐户,并获得未读邮件和邮件总数。

代码语言:javascript
运行
复制
$inbox = imap_open('{imap.gmail.com:993/imap/ssl}INBOX','user's email id','user's password') or die('Cannot connect to Gmail: ' . imap_last_error());
        $unread_emails = imap_search($inbox,'UNSEEN');
        $emails = imap_search($inbox,'ALL', SE_UID);

4.Then

代码语言:javascript
运行
复制
if ('email_max_uid') = 0
        $recent_mails_count = count($unread_emails);
    else
        $recent_mails_count = max($emails) - Array['email_max_uid'];

5.显示最近邮件数

代码语言:javascript
运行
复制
echo count($recent_mails_count);

6.我放了一个链接,当用户登录到他的帐户email_max_uid is updated with count($emails)时,不需要询问他的电子邮件id和密码就可以登录到他的gmail帐户。

现在,当用户访问该页面时,它遵循上述过程和他的no.

  1. 。的最新电子邮件将显示在页面上。

*我的解决方案是对于用户只能通过这个应用程序登录到他的gmail帐户的情况,如果他从外部登录到他的帐户,数据库将不会更新,以防错误。的邮件数量将是shown.In我的问题案例,用户甚至不知道自己的gmail id和密码由公司提供,只能看到他们的邮件。因此他不能从外部登录到他的这个帐户。这就是这个解决方案有效的原因。

这就是我如何解决它的3天ago.Sorry延迟回复

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7363077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档