【问题标题】:PHP - imap count unseen emails gives always '1' as resultPHP - imap count unseen emails 总是给出“1”作为结果
【发布时间】:2015-06-14 10:21:33
【问题描述】:

尝试计算我的邮箱中未查看的电子邮件,我的脚本会进行计数,但是当没有未查看的电子邮件时,结果始终为 1 且没有 0。知道为什么吗?

这里是我到目前为止的代码。

php:

    $hostname = '{imap.example.com:993/imap/ssl}INBOX';
    $username = 'myemail@example.co.uk';
    $password = 'mypass';
    $imap = imap_open($hostname, $username, $password) or die("imap connection error");
    $result = imap_search($imap, 'UNSEEN');
    $new_inbox_msg = count($result);
    echo $new_inbox_msg

【问题讨论】:

  • 你试过var_dump()ing $result吗?
  • stackoverflow.com/questions/6707581/… stackoverflow.com/questions/7363077/… 试试这些主题,希望对您有所帮助!
  • 您应该始终透明地标记您对问题所做的更改,如果它们不重要的话。否则事情会变得非常混乱......
  • 感谢@JonStirling 添加 var_dump 结果为 int(1)
  • @SNos 不,它没有。首先,您编辑了您的问题,因此代码的上下文完全改变了,现在您在问题的 cmets 和 arkascha 的答案的 cmets 中给出了不同的答案。请自行整理并确保您告诉我们的内容准确无误且与提供的代码一致。

标签: php html email count imap


【解决方案1】:

imap_search() 根据documentation 返回一个数组,而不是一个数字。

所以你需要:

$result = imap_search($imap, 'UNSEEN');
echo count($result);

好的,抱歉,小姐自己解释了文档。因此,这里对您的问题进行了解释:该函数确实返回了一个数组,但是一个数组,其中包含您移交的每个搜索属性的一个结果(计数)。由于您只指定了一个属性('UNSEEN'),因此您总是会在数组中获得一个元素。 That 元素的值是匹配该搜索条件的消息数。

因此正确的用法应该是:

$result = imap_search($imap, 'UNSEEN');
if (is_array($result) && isset($result[0])) {
    echo count($result[0]);
} else {
    echo "Failed to query number of messages\n";
}

【讨论】:

  • 感谢您尝试过此操作,但如果没有未查看的电子邮件,结果将显示 1
  • @SNos 那么$result 在这种情况下包含什么?
  • 例如,如果我有 5 封未读电子邮件,则结果为“5”,但如果没有,则结果显示“1”。如果 1 封未见过的电子邮件结果为 '1'
  • @SNos 再一次:什么 $result 在这种情况下包含?你看,你必须告诉我们,我们看不到你的 imap 帐户返回什么......所以如果你想在这里找到问题,你必须转储变量。
  • 我对答案又做了修改,请再看一遍。我不得不道歉:最初我想念自己理解文档(没有阅读足够......)。上面的代码行现在应该是正确的方法...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-13
  • 2011-02-02
  • 1970-01-01
  • 2015-11-20
  • 1970-01-01
相关资源
最近更新 更多