imap_msgno()为uid返回的形式imap_search()返回0

时间:2014-07-10 19:20:46

标签: php email imap

我不确定如何调试它,函数imap_msgno()返回0而不是消息号而没有任何错误。这是代码中的一部分(包括调试信息):

// Retrieve and order emails
$search = imap_search($this->open, 'SINCE "' . $date . '"');
$sorted_search = $this->order_search($search, $sorted);

// Store all the messages
$Messages = array();
foreach($sorted_search as $msgUID) {
  $msgNo  = imap_msgno ($this->open, $msgUID);
  $header = imap_header($this->open, $msgNo);

  var_dump($msgUID);
  var_dump($msgNo);
  if (empty($header->message_id)) {
    var_dump($header);
    }
  else {
    echo "Good";
    }
  echo " | ";

  // mode code ...
  }

这应该返回许多int (12) int (10) Good | int (11) int (9) Good | ...。但是,情况并非如此,它会返回此信息(为了清晰起见,添加了回报):

int(12) int(10) Good |
int(11) int(9) Good |
int(10) int(0) bool(false) |
int(9) int(0) bool(false) |
int(8) int(8) Good | 
...

如您所见,$msgNo似乎是正确的。 function imap_msgno() in the documentation没有提供有关无效$msgNo行为的任何更多信息,因为它应该是有效的$msgNo,因此它是返回的{{1}的一部分。 }}。知道如何调试这个或哪里出错了?

1 个答案:

答案 0 :(得分:0)

除非在order_search调用中设置它们,否则您将返回消息编号而不是唯一ID。如果在imap_search调用中设置选项SE_UID,例如

$search = imap_search($this->open, 'SINCE "' . $date . '"', SE_UID);

你应该得到独特的ID。