我正在尝试在PHP编程时使用GMAIL api时实现Zend IMAP框架
一切顺利,我收到消息 - 电子邮件(从/到)但出于存储目的,我需要消息的唯一ID。
有没有办法解决这个问题?我使用标准代码。
非常感谢,希望这个问题显然已经足够描述了。
我想要唯一消息ID的原因是因为我需要存储数据。 如果我不使用唯一ID我无法将消息与db中的内容进行比较,则zend中给出的messagenumber为例8.如果我然后删除消息nr。 7然后nr。 8将成为nr。 7这使得它不是很有用。
我可以看到我必须使用:X-GM-MSGID,但我不知道在哪里放...当我把它放在我的提取中它不起作用:
$test = $imap->fetch("X-GM-MSGID", null, $emailto);
public function fetch($items, $from, $to = null)
{
if (is_array($from)) {
$set = implode(',', $from);
} else if ($to === null) {
$set = (int)$from;
} else if ($to === INF) {
$set = (int)$from . ':*';
} else {
$set = (int)$from . ':' . (int)$to;
}
$items = (array)$items;
$itemList = $this->escapeList($items);
$this->sendRequest('FETCH', array($set, $itemList), $tag);
$result = array();
while (!$this->readLine($tokens, $tag)) {
// ignore other responses
if ($tokens[1] != 'FETCH') {
continue;
}
// ignore other messages
if ($to === null && !is_array($from) && $tokens[0] != $from) {
continue;
}
// if we only want one item we return that one directly
if (count($items) == 1) {
if ($tokens[2][0] == $items[0]) {
$data = $tokens[2][1];
} else {
// maybe the server send an other field we didn't wanted
$count = count($tokens[2]);
// we start with 2, because 0 was already checked
for ($i = 2; $i < $count; $i += 2) {
if ($tokens[2][$i] != $items[0]) {
continue;
}
$data = $tokens[2][$i + 1];
break;
}
}
} else {
$data = array();
while (key($tokens[2]) !== null) {
$data[current($tokens[2])] = next($tokens[2]);
next($tokens[2]);
}
}
// if we want only one message we can ignore everything else and just return
if ($to === null && !is_array($from) && $tokens[0] == $from) {
// we still need to read all lines
while (!$this->readLine($tokens, $tag));
return $data;
}
$result[$tokens[0]] = $data;
}
if ($to === null && !is_array($from)) {
/**
* @see Zend_Mail_Protocol_Exception
*/
require_once 'Zend/Mail/Protocol/Exception.php';
throw new Zend_Mail_Protocol_Exception('the single id was not found in response');
}
return $result;
}
答案 0 :(得分:1)
public function getMessage($id)
{
$data = $this->_protocol->fetch(array('FLAGS', 'RFC822.HEADER', 'RFC822.TEXT', 'X-GM-MSGID'), $id);
$header = $data['RFC822.HEADER'];
$content = $data['RFC822.TEXT'];
$messageid = $data['X-GM-MSGID'];
var_dump($messageid);
$flags = array();
foreach ($data['FLAGS'] as $flag) {
$flags[] = isset(self::$_knownFlags[$flag]) ? self::$_knownFlags[$flag] : $flag;
}
return new $this->_messageClass(array('handler' => $this, 'id' => $id, 'headers' => $header, 'content' => $content, 'flags' => $flags, 'messageid' => $messageid));
}
由于某种原因,从IMAP类中提取它时工作正常。
只需将其传递给您的其他课程并按原样使用