Ben zend posta istimal zend_mail_storage_imap ile genişletilmiş ve kullanıcının e-postalarda anahtar kelimeleri arar bir uygulama inşa.
Sorun her e-posta açılır ve okundu olarak işaretlenir tutmasıdır. Okundu olarak işaretli her postayı işaretlemek e-postaların vücut kontrol ve değil bir yolu var mı?
İşte anki çalışma kod. Otomatik kişinin gelen kutusuna bakar, bir ajax sorgusu parçası. Bu mevcut haliyle, bu (gmail de) okumak gibi bir kullanıcının en güncel posta ile başlayarak her mail işareti olacaktır. Bu gövde metni kontrol, ama okumak gibi e-posta işaretlemek değil, mümkün olacaktır. Alternatif olarak, ben her mail yukarı bakarak önce okunup okunmadığını kontrol etmek gerekir, ve sonra bir çözüm olarak bu durumuna geri yüklemek?
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);
}
}
EDIT - here's the final code for those interested strong>
$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;
}
Tüm kod döngüye, işte, ben her e-posta için sıralama algoritması / benim bütün arama gerçekleştirin.
if ($read==0)
{
$storage->setFlags($i, array(Zend_Mail_Storage::FLAG_RECENT)); //marks as new
}
İşte, ben gidip okunmamış olarak (uygulamalarına önce) okumak değil e-postaları işaretlemek. Ben bu işlemi gerçekleştirirken en etkili yolu (ben bulabildiğim) olduğunu düşünüyorum. Ben başka kodları veya yorumlarınızı bekliyoruz.