PHP email to mysql database issue when not deleting emails from server

。_饼干妹妹 提交于 2019-12-07 09:32:02

问题


I am using a php class etodb found here

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

It checks an email account and downloads the messages into a mysql database. It works perfectly, however at the end of each loop (looping for each message in the inbox) it deletes the email. I know how to stop it from deleting the email, but the issue is for some reason the script wont insert any new emails into the database unless I allow it to delete the messages OR the inbox is completely empty.

Here is the end portion of the php class referenced above. This section just loops through each message and inserts it into the database AND if set it will delete the messages. My question in summary is to just let the script work correctly without the need to delete messages or have an empty inbox.

$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:


But your problem is that in the loop, you keep grabbing hte first email.

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

The class has an internal pointer "$this->msgid" that you need to increment to get the next message. If you set this to $i + 1 before calling the function you should get the next message.

#Get message determined b $i
$this->msgeid = $i + 1;
$email = $this->email_get();

(Note: edited, now seen the source)



来源:https://stackoverflow.com/questions/14669177/php-email-to-mysql-database-issue-when-not-deleting-emails-from-server

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!