3

私は 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
}   

ここでは、(実装前に)読まれなかったメールを未読としてマークします。これは、この操作を実行する (私が見つけた) 最も効率的な方法だと思います。他のコードやコメントを歓迎します。

4

5 に答える 5

3

「seen」フラグの設定を解除するには:

$flags = $msg->getFlags();
unset($flags[Zend_Mail_Storage::FLAG_SEEN]);
$storage->setFlags($i, $flags);

「最近」のフラグを設定しても、必ずしも希望どおりの結果が得られるとは限りません。Gmailでは、メールに「重要」のマークが付けられます。

于 2011-12-15T20:17:35.317 に答える
3

メッセージを読んだ後、見たフラグを設定解除できます。setFlags メソッドの imap 実装も参照してください。API ドキュメント

于 2010-09-28T14:19:51.887 に答える
0

空の配列を使用してフラグをリセットすることもできます

$mailstorage->setFlags($messageID, array());
于 2013-09-23T14:05:42.223 に答える
0

Zend Framework の IMAP Storage でメールを読む場合、Zend_Mail_Storage_Imap の setFlags というメソッドにアクセスできます

ZF マニュアルには記載されていないと思いますが、API ドキュメント (上記のリンクを参照) を調べて、メッセージにステータス/フラグを設定することをお勧めします。

于 2010-09-28T19:03:44.353 に答える