diff --git a/vendors/shells/vault.php b/vendors/shells/vault.php index 92badc25..0638d60e 100755 --- a/vendors/shells/vault.php +++ b/vendors/shells/vault.php @@ -13,12 +13,12 @@ class VaultShell extends Shell { /****************************************************** * Config Variables * *****************************************************/ - $testing = 0; //Whether to actually move the emails. 1=test, 0=production + $testing = 1; //Whether to actually move the emails. 1=test, 0=production /* Setup Connection to the IMAP server */ $username = 'vault'; $password = 'xjdYOsmJWc37'; /* The password for the account to be checked */ $email_dir = '/var/www/cakephp/app/emails'; - $temp_filename = 'temp.eml'; + $ripmime_path = '/usr/local/bin/ripmime'; @@ -30,7 +30,7 @@ class VaultShell extends Shell { $ripmime_path = '/opt/local/bin/ripmime'; } - $mbox = imap_open("{mail.cmctechnologies.com.au:143/novalidate-cert}INBOX", $username, $password) or die("can't connect: " . imap_last_error()); + $mbox = imap_open("{mail.cmctechnologies.com.au:143}INBOX", $username, $password) or die("can't connect: " . imap_last_error()); $MC = imap_check($mbox); $number_of_messages = $MC->Nmsgs; @@ -66,28 +66,28 @@ class VaultShell extends Shell { $this->data['Email']['subject'] = $message['subject']; $this->data['Email']['body'] = ""; $this->data['Email']['plainbody'] = ""; - $this->data['Email']['uniqid'] = $uniqid; + $structure = imap_fetchstructure($mbox, $i); $attachments = 1; if (empty($structure->parts)) { /* A single part message. No attachments and is plain text */ $this->data['Email']['body'] = imap_body($mbox, $i); } else { - $attachments = $this->fetchBodyAttachments($mbox, $i, $temp_filename, $email_dir, $uniqid, $ripmime_path); + $attachments = $this->fetchBodyAttachments($mbox, $i, $email_dir, $uniqid, $ripmime_path); if($attachments != 1) { foreach ($attachments as $attachment) { if($attachment['type'] == 'text/html') { //Assuming All HTML attachments are the body of the email if(file_exists($email_dir.'/'.$uniqid.'/'.$attachment['name'])) { - $filecontents = file_get_contents($email_dir.'/'.$uniqid.'/'.$attachment['name']); - $size = filesize($email_dir.'/'.$uniqid.'/'.$attachment['name']); + $filecontents = file_get_contents($email_dir.'/'.$attachment['name']); + $size = filesize($email_dir.'/'.$attachment['name']); $this->data['Email']['body'] .= $filecontents; } } if($attachment['type'] == 'text/plain') { //Found plain text if(file_exists($email_dir.'/'.$attachment['name'])) { - $filecontents = file_get_contents($email_dir.'/'.$uniqid.'/'.$attachment['name']); - $size = filesize($email_dir.'/'.$uniqid.'/'.$attachment['name']); + $filecontents = file_get_contents($email_dir.'/'.$attachment['name']); + $size = filesize($email_dir.'/'.$attachment['name']); $this->data['Email']['plainbody'] .= $filecontents; } @@ -104,16 +104,19 @@ class VaultShell extends Shell { $email_id = $this->Email->id; if($attachments != 1) { foreach ($attachments as $attachment) { - if(file_exists($email_dir.'/'.$uniqid.'/'.$attachment['name']) != FALSE) { + if(file_exists($email_dir.'/'.$attachment['name']) != FALSE) { if( ($attachment['type'] != 'text/html') && ($attachment['type'] != 'multipart/mixed') && - ($attachment['type'] != 'multipart/alternative') ) { + ($attachment['type'] != 'multipart/alternative') && + ($attachment['type'] != 'multipart/report') + + ) { $this->EmailAttachment->create(); $this->data['EmailAttachment']['email_id'] = $email_id; $this->data['EmailAttachment']['name'] = $attachment['name']; $this->data['EmailAttachment']['type'] = $attachment['type']; - $this->data['EmailAttachment']['size'] = filesize($email_dir.'/'.$uniqid.'/'.$attachment['name']); - $this->data['EmailAttachment']['filename'] = $email_dir.'/'.$uniqid.'/'.$attachment['name']; + $this->data['EmailAttachment']['size'] = filesize($email_dir.'/'.$attachment['name']); + $this->data['EmailAttachment']['filename'] = $email_dir.'/'.$attachment['name']; if ($this->EmailAttachment->save($this->data)) { echo "Saved file successfully to database\n"; } @@ -149,43 +152,16 @@ class VaultShell extends Shell { * I may change this to simply delete the emails. This will do for now, but it's doubling up on the storage for useless files. * */ - $discarded_msgs[] = imap_uid($mbox,$i); + if($testing == 0 ) { + imap_mail_move($mbox, $no, 'INBOX/Discard'); + } } } - // $this->rmdirr($email_dir); //delete all attachments from the working directory. Easiest way to stop random files persisting - - - - /* if(isset($stored_msgs)) { - - foreach($stored_msgs as $msg) { - $no = imap_msgno($mbox,$msg); - - $this_header = imap_headerinfo($mbox, $no); - - echo "Going to store: $no\t $msg\t".$this_header->subject."\n"; - if($testing == 0) { - imap_mail_move($mbox, $no, 'INBOX/Stored'); - } - } - } - if(isset($discarded_msgs)) { - foreach($discarded_msgs as $msg) { - $no = imap_msgno($mbox,$msg); - $this_header = imap_headerinfo($mbox, $no); - echo "Going to discard: $no\t $msg\t".$this_header->subject."\n"; - if($testing == 0) { - imap_mail_move($mbox,$no, 'INBOX/Discarded'); - } - } - - } - * */ /* Finished working with the IMAP server. Make the changes and close the connection */ imap_expunge($mbox); @@ -200,17 +176,13 @@ class VaultShell extends Shell { * */ - function fetchBodyAttachments($mailbox, $msg_number, $filename, $email_dir, $uniqid, $ripmime_path) { + function fetchBodyAttachments($mailbox, $msg_number, $email_dir, $uniqid, $ripmime_path) { - $mkdirresult = mkdir ($email_dir.'/'.$uniqid); - if($mkdirresult == FALSE) { - echo "ERROR: Failed to make ".$email_dir.'/'.$uniqid; - return 1; - } + - $email_file = $email_dir.'/'.$uniqid.'/'.$filename; + $email_file = $email_dir.'/'.$uniqid.'.eml'; imap_savebody($mailbox, $email_file, $msg_number); - $command = "$ripmime_path -i $email_file -d $email_dir/$uniqid -v --verbose-contenttype --paranoid --prefix $msg_number"; + $command = "$ripmime_path -i $email_file -d $email_dir --prefix --paranoid -v --verbose-contenttype"; $output = array(); exec($command, $output, $status); @@ -226,7 +198,7 @@ class VaultShell extends Shell { $name = explode('=', $words[2]); $attachments[$j]['type'] = $type[1]; $attachments[$j]['name'] = $name[1]; - echo "in message number $msg_number: found attachment ".$attachments[$j]['name'].' '.$attachments[$j]['type']."\n"; + echo "in message number $msg_number ($uniqid): found attachment ".$attachments[$j]['name'].' '.$attachments[$j]['type']."\n"; } return $attachments; } @@ -236,19 +208,6 @@ class VaultShell extends Shell { } - /* clearEmailyAttachmentDirs($email_dir, $filename, $attachment_dir, $attachments) - * - * Deletes $email_dir/$filename.eml and the attachments specified by $attachments - * */ - function clearEmailAttachmentDirs($email_dir, $filename, $attachments) { - unlink("$email_dir/$filename"); - foreach ($attachments as $attachment) { - unlink($email_dir.'/'.$attachment['name']); - } - } - - - function getMessage($mbox, $msgnumber, $headers) { $subject = $headers->subject; @@ -338,54 +297,16 @@ class VaultShell extends Shell { } - /** - * Delete a file, or a folder and its contents (recursive algorithm) - * - * @author Aidan Lister - * @version 1.0.3 - * @link http://aidanlister.com/repos/v/function.rmdirr.php - * @param string $dirname Directory to delete - * @return bool Returns TRUE on success, FALSE on failure - */ - function rmdirr($dirname) { - // Sanity check - if (!file_exists($dirname)) { - return false; - } - - // Simple delete for a file - if (is_file($dirname) || is_link($dirname)) { - return unlink($dirname); - } - - // Loop through the folder - $dir = dir($dirname); - while (false !== $entry = $dir->read()) { - // Skip pointers - if ($entry == '.' || $entry == '..') { - continue; - } - // Recurse - $this->rmdirr($dirname . DIRECTORY_SEPARATOR . $entry); - } - // Clean up - $dir->close(); - return; //removing the last recursion - should remove the deletion of the last directory I hope. Lazy hack using this but should work - //rmdir($dirname); - } - - + /** * Generate a uniq id. - * @todo Ensure the sub-directory doesn't exist to avoid collisions + * * */ function getUniqId($email_dir) { $uniqid = uniqid(null,TRUE); - //while(is_dir($email_dir."/".$uniqid) == TRUE) { - // - // } + return $uniqid; }