当不从服务器中删除电子邮件时,PHP将电子邮件保存到MySQL数据库时出现问题。

4

我正在使用一个PHP类etodb,它可以在这里找到:

http://www.phpclasses.org/package/3324-PHP-Retrieve-e-mail-messages-into-a-MySQL-database.html

它会检查电子邮件帐户并将消息下载到MySQL数据库中。它完美地工作,但是在每个循环的末尾(循环每个收件箱中的消息)它会删除电子邮件。我知道如何阻止它删除邮件,但问题是出于某种原因,除非我允许它删除邮件或收件箱完全为空,否则脚本不会将任何新邮件插入到数据库中。

这是上面引用的PHP类的结尾部分。此部分只是循环遍历每个消息并将其插入到数据库中,并且如果设置了它,它将删除消息。我的问题总结就是让脚本正确工作,而无需删除邮件或让收件箱为空。

$total_messages = $this->num_message(); 

// IM ASSUMING THIS FOR LOOP IS NOT LOOPING MESSAGES CORRECTLY 
for ($i = 0; $i < $total_messages; $i++) {


#Get first message
$email = $this->email_get();

$ismsgdb = $this->db_add_message($email); // THIS INSERTS EACH MSG INTO DATABASE

#Get store dir
$dir = $this->dir_name();

$id_log = $this->add_db_log($email, 'Copy e-mail - start ');

foreach($this->partsarray as $part){
 if($part[text][type] == 'HTML'){
   #$message_HTML = $part[text][string];
   $this->db_update_message($part[text][string], $type= 'HTML');
 }elseif($part[text][type] == 'PLAIN'){
   $message_PLAIN = $part[text][string];
   $this->db_update_message($part[text][string], $type= 'PLAIN');
 }elseif($part[attachment]){
    #Save files(attachments) on local disc

   // $message_ATTACH[] = $part[attachment];
    foreach(array($part[attachment]) as $attach){
        $attach[filename] = $this->mimie_text_decode($attach[filename]);
        $attach[filename] = preg_replace('/[^a-z0-9_\-\.]/i', '_', $attach[filename]);
        $this->add_db_log($email, 'Start coping file:"'.strip_tags($attach[filename]).'"');

        $this->save_files($this->newid.$attach[filename], $attach[string]);
        $filename =  $dir.$this->newid.$attach[filename];
        $this->db_add_attach($attach[filename], $filename);
        $this->update_db_log('<b>'.$filename.'</b>Finish coping: "'.strip_tags($attach[filename]).'"', $this->logid);
    }
  //

 }elseif($part[image]){
    #Save files(attachments) on local disc

    $message_IMAGE[] = $part[image];

    foreach($message_IMAGE as $image){
        $image[filename] = $this->mimie_text_decode($image[filename]);
        $image[filename] = preg_replace('/[^a-z0-9_\-\.]/i', '_', $image[filename]);
        $this->add_db_log($email, 'Start coping file: "'.strip_tags($image[filename]).'"');


        $this->save_files($this->newid.$image[filename], $image[string]);
        $filename =  $dir.$this->newid.$image[filename];
        $this->db_add_attach($image[filename], $filename);
        $this->update_db_log('<b>'.$filename.'</b>Finish coping:"'.strip_tags($image[filename]).'"', $this->logid);
    }

 }

}
$this->spam_detect();
$this->email_setflag(); 
$this->email_delete(); // WHEN I REMOVE THIS THE SCRIPT WONT GRAB NEW EMAILS
$this->email_expunge(); // WHEN I REMOVE THIS THE SCRIPT WONT GRAB NEW EMAILS




$this->update_db_log('Finish coping', $id_log);


}
1个回答

1
但是你的问题在于,在循环中,你不断地获取第一个电子邮件。
#Get first message
$email = $this->email_get();

该类有一个内部指针"$this->msgid",您需要将其递增以获取下一条消息。如果在调用函数之前将其设置为$i + 1,则应该可以获取下一条消息。
#Get message determined b $i
$this->msgeid = $i + 1;
$email = $this->email_get();

抱歉,我需要看到源代码才能够准确地将其翻译成中文。

谢谢!我知道这是一件简单的事情 - 你的解决方案解决了我的问题。 - Joshua Olds

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接