2012-04-24 91 views
3

我写了一个类来连接到我的邮箱,并将垃圾邮件移至我的垃圾文件夹。它似乎没有工作,但我不知道为什么。这里是我有什么:imap_mail_move无法正常工作

<?php 
$cleaner = new Mail_cleaner(); 

echo 'Deleted '.$cleaner->deleted.' files'; 

Class Mail_cleaner { 

public $server = '{mail.gridhost.co.uk:993/imap/ssl}'; 
public $folder = 'INBOX'; 
public $user = '[email protected]'; 
public $password = 'password'; 

public $mailbox; 
public $check; 
public $thelist; 
public $overviews; 
public $ids = array(); 
public $deleted = 0; 

function __construct() { 
    $this->open_connection(); 
    $this->get_messages(); 
} 

function get_messages() { 
    $this->ids = array(); 
    $this->overviews = imap_fetch_overview($this->mailbox,"1:{$this->check->Nmsgs}"); 

    foreach($this->overviews as $overview) { 
     //print_r($overview); exit; 
     if(stripos($overview->subject, 'SPAM')!==FALSE 
     || stripos($overview->subject, 'Luxury Replicas')!==FALSE 
     || stripos($overview->subject, 'Pharmacy')!==FALSE 
     || stripos($overview->subject, 'viagra')!==FALSE 
     || stripos($overview->subject, 'dr.maxman')!==FALSE 
     || stripos($overview->subject, 'cialis')!==FALSE 
     || stripos($overview->subject, 'penis enlarge')!==FALSE 
     || stripos($overview->from, 'westin')!==FALSE 
     || stripos($overview->from, 'rightmove')!==FALSE 
     || stripos($overview->from, 'groupon')!==FALSE 
     || stripos($overview->from, 'primelocation')!==FALSE 
     || stripos($overview->from, 'mg-rover')!==FALSE 
     ) { 
      $this->ids[] = $overview->uid; 

     } 
    } 
    if(count($this->ids) > 0) { 
     $this->move_and_delete(); 
    } 
} 

function move_and_delete() { 
    foreach($this->ids as $id) { 
     // move to junk 
     $result = imap_mail_move($this->mailbox, $id, 'INBOX.Junk'); 

     if($result) { 
      //imap_delete($this->mailbox, $id); 
      $this->deleted++; 
     } 
    } 
    imap_expunge($this->mailbox); 
    imap_close($this->mailbox); 
} 

function open_connection() { 
    $this->mailbox = imap_open($this->server.$this->folder, $this->user, $this->password); 
    $this->check = imap_check($this->mailbox); 
    $this->thelist = imap_getmailboxes($this->mailbox, $this->server, "*"); 
} 

} 
?> 

我得到相同的输出,每次说删除115消息。如果我快速连续运行两次,那么第二次输出应该被删除0消息。所以基本上它不会正确地移动它们,因为它们不会从收件箱中消失到垃圾中。有人知道为什么它获得了所有的消息并循环着它们,但似乎这一举动并未发生。

回答

4

首先我想知道你将UID添加到你的数组中,但是你试图从消息序列中删除。您需要将选项参数(CP_UID)添加到您的imap_mail_move调用中。 $result = imap_mail_move($this->mailbox, $id, 'INBOX.Junk', CP_UID); 这也可能是您的清除不起作用的原因,因为它可能没有移动任何消息。尝试期间$结果的价值是多少? 由于您最后关闭了邮箱,因此您可以使用imap_close($this->mailbox, CL_EXPUNGE)关闭邮箱。 希望有帮助, 斯特凡

+0

这样做的伎俩!非常感谢! – geoffs3310 2012-04-24 18:13:22