Я использую Zend Mail, расширенную с помощью Zend_mail_storage_imap, и создал приложение, которое ищет ключевые слова в электронных письмах пользователя.
Проблема в том, что он открывает каждое письмо и сохраняет его помеченным как прочитанное. Есть ли способ проверить тело письма и не помечать каждое письмо как прочитанное?
Вот текущий рабочий код. Это часть ajax-запроса, который автоматически просматривает чей-то почтовый ящик. В этой текущей форме каждая почта, начиная с самой последней почты пользователя, будет помечаться как прочитанная (в gmail). Можно ли будет проверить основной текст, но не пометить письмо как прочитанное. Или мне нужно проверить, прочитано ли каждое письмо или непрочитано, прежде чем искать его, а затем восстановить его в это состояние в качестве обходного пути?
if (strpos(htmlentities($storage->getMessage($i)),$searchterm))
{
$fromaddress = str_replace("'","",$storage->getMessage($i)->from);
$fromaddress = str_replace('"','',$fromaddress);
$sql = "SELECT `senderemail`,`subscribed` FROM email_spam WHERE `useremail` = '$_SESSION[email_address]' AND `senderemail` = '$fromaddress'";
$result = mysql_query($sql) or die (mysql_error());
$num = mysql_num_rows($result);
if($num == 0)
{
$emailmessage = mysql_escape_string($storage->getMessage($i)->getContent());
$sql_insert = "INSERT into `email_spam` (`message`,`useremail`,`senderemail`,`datetime`,`subscribed`) VALUES ('$emailmessage','$_SESSION[email_address]','$fromaddress',now(),1)";
mysql_query($sql_insert,$link) or die("Insertion Failed:" . mysql_error());
$sql = "SELECT `emailid`,`datetime` FROM email_spam WHERE `useremail` = '$_SESSION[email_address]' ORDER BY `datetime` desc";
$getid = mysql_query($sql) or die (mysql_error());
$num = mysql_num_rows($getid);
}
}
РЕДАКТИРОВАТЬ - вот окончательный код для заинтересованных
$storage = new Zend_Mail_Storage_Imap($imap);
$flags = $storage->getMessage($i)->getFlags();
$newflag = $flags[Zend_Mail_Storage::FLAG_RECENT];
$oldflag = $flags['\Seen'];
if(!empty($flags['\Seen']))
{
$read=1;
}
else
{
$read=0;
}
Весь код зациклен, поэтому здесь я выполняю весь свой алгоритм поиска / сортировки для каждого отдельного электронного письма.
if ($read==0)
{
$storage->setFlags($i, array(Zend_Mail_Storage::FLAG_RECENT)); //marks as new
}
Здесь я отмечаю электронные письма, которые не были прочитаны (до реализации), как непрочитанные. Я думаю, что это самый эффективный способ (который я мог найти) для выполнения этой операции. Я приветствую любые другие коды или комментарии.