当邮箱为空时,imap_check抛出通知

时间:2013-12-05 10:32:53

标签: php imap

所以我最近开始了第一份真正的工作(耶!)我正在研究电子邮件检查工具。

它工作得很好,没有错误...只要有电子邮件。

$mbox = imap_open("{.../pop3/novalidate-cert}INBOX","smith@example.com","...");
$inbox = imap_check($mbox);

上面的代码在收件箱中有电子邮件时效果很好,但如果没有,我会在页面末尾收到此错误:

  

注意:未知:第0行的未知邮箱为空(errflg = 1)

除了error_reporting(E_ALL^E_NOTICE)之外,没有多少错误抑制似乎能够阻止它被抛出,我宁愿不使用它(一次!)

可以做些什么吗?

2 个答案:

答案 0 :(得分:7)

我认为这可能是PHP的差异。

查看此IMAP库https://github.com/barbushin/php-imap。我在一个已经导入了数千封没有问题的电子邮件的项目中使用了这个。

protected function initImapStream() {
    $imapStream = @imap_open($this->imapPath, $this->login, $this->password);
    if(!$imapStream) {
        throw new ImapMailboxException('Connection error: ' . imap_last_error());
    }
    return $imapStream;
}

使用@错误抑制运算符,我猜这是解决方法。

来源:https://github.com/barbushin/php-imap/blob/master/src/ImapMailbox.php#L48

编辑:结果您可以通过选项关闭此通知。引自http://php.net/manual/en/function.imap-open.php#73514

  

你可以避免这个消息:

     

警告:(null)();第0行的“未知”中的邮箱为空(errflg = 1)

     

通过将选项OP_SILENT指定为imap_open。

答案 1 :(得分:4)

我刚刚发现调用imap_errors()函数会抑制通知异常。

因此,您唯一需要做的就是在代码中的某处添加:

$errors = imap_errors();

之后你用$ errors变量做什么取决于你。