私は zend_mail_storage_imap で拡張された zend メールを使用しており、ユーザーのメールでキーワードを探すアプリケーションを構築しました。
問題は、各メールを開き、既読としてマークしたままにすることです。電子メールの本文をチェックし、チェックされた各メールを既読としてマークしない方法はありますか?
これが現在の作業コードです。これは、誰かの受信トレイを自動的に調べる 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
}
ここでは、(実装前に)読まれなかったメールを未読としてマークします。これは、この操作を実行する (私が見つけた) 最も効率的な方法だと思います。他のコードやコメントを歓迎します。