michele michele - 24 days ago 5
PHP Question

Set an email as SEEN on IMAP server

I am trying to read mail from an Imap Server (Gmail). I would check if there are new mail (unseen) and check it as seen.
I wrote this code but

imap_setflag_full


seems to not work.
If I have a new mail the script is unable to put the SEEN flag and it echo me that there is always one unseen mail.

$mbox=imap_open( "{imap.gmail.com:993/ssl/novalidate-cert}" , $this->username, $this->password);
if ($mbox)
{ echo "Connected\n<br><br>";
} else { exit ("Can't connect: " . imap_last_error() ."\n"); echo "FAIL!\n"; };

if ($hdr = imap_check($mbox)) {
$msgCount = $hdr->Nmsgs;
echo "There are ".$msgCount." mail";
} else {
echo "Failed to get mail";

}

$result = imap_search($mbox, 'UNSEEN');
echo "<br>Result: ";
print_r($result);
if($result==false)
echo "No email";
else{
echo "you have mail";
echo("<br>now I set the Seen flag for this mail");
rsort($result);
$status = imap_setflag_full($mbox, "1", "\\Seen \\Flagged", ST_UID);
}

echo"<br><br>";


$result = imap_search($mbox, 'UNSEEN');
echo "<br>Result: ";
print_r($result);
if($result==false)
echo "no mail";
else{
echo "there are still";

}


Thank you so much.

Answer

I think the problem is with the "1" you have hardcoded. I replaced the "1" with:

foreach ($result as $mail) {
    $status = imap_setflag_full($mbox, $mail, "\\Seen \\Flagged", ST_UID);
}

and it seems to work. When using ST_UID, this means actually an ID, and not a sequence number.

Comments