我正在尝试使用以下代码将邮件从收件箱移到已处理的标签中:
$inBox = imap_open($host,$user,$pass) or die('Error: ' . imap_last_error()); if( $emails = imap_search($inBox,'ALL') ) { foreach($emails as $email_number) { imap_mail_move($inBox,$email_number,'Processed') or die('Error'); } } imap_expunge($inBox); imap_close($inBox);
不幸的是,当消息获得Processed标签时,它们仍然留在InBox中.
我怎么能让他们离开收件箱?
实际上…电子邮件留在收件箱中的原因是,当imap_mail_move做了它的事情时,所有剩余邮件的ID减1,所以当foreach循环移动到下一条消息时,留下一条消息.这跳过每次迭代重复的消息.这就是为什么似乎imap_mail_move无效.
解决方案是使用唯一的消息UID而不是可能重复的ID:
$inBox = imap_open( $host,$pass ); $emails = imap_search( $inBox,'ALL',SE_UID ); if( $emails ) { foreach( $emails as $email_uid ) { imap_mail_move($inBox,$email_uid,'processed',CP_UID); } }