Exemplo n.º 1
0
 /**
  * Function to divided multipart mail into different part
  *
  * @param $part
  * @param $email
  * @param $message
  * @param array $response
  * @param int $part_index
  *
  * @return array
  */
 function parse_message($part, $email, $message, $response = array(), $part_index = 0)
 {
     $part_index = $part_index + 1;
     $ContentType = strtok($part->contentType, ';');
     if (!(false === strpos($ContentType, 'multipart/related'))) {
         $totParts = $part->countParts();
         for ($rCount = 1; $rCount <= $totParts; $rCount++) {
             $tPart = $part->getPart($rCount);
             $response = $this->parse_message($tPart, $email, $message, $response, $part_index);
         }
     } else {
         if (!(false === strpos($ContentType, 'multipart/alternative'))) {
             $totParts = $part->countParts();
             for ($rCount = 1; $rCount <= $totParts; $rCount++) {
                 $tPart = $part->getPart($rCount);
                 $response = $this->parse_message($tPart, $email, $message, $response, $part_index);
             }
         } else {
             $filename = '';
             try {
                 $filenameval = $part->getHeader('content-disposition')->getFieldValue('filename');
                 if (preg_match('*filename=\\"([^;]+)\\"*', $filenameval, $matches)) {
                     if (isset($matches[1])) {
                         $filename = trim($matches[1]);
                     }
                 }
             } catch (Exception $e) {
             }
             if ('text/plain' == $ContentType && empty($filename)) {
                 $response['txtBody'] = $this->get_decoded_message($part);
             } else {
                 if ('text/html' == $ContentType && empty($filename)) {
                     $response['htmlBody'] = $this->get_decoded_message($part);
                     $response['htmlBody'] = balanceTags($response['htmlBody']);
                 } else {
                     if (trim($filename) == '') {
                         $filename = rtmb_get_extention($ContentType);
                     }
                     $filedata = $this->get_decoded_message($part);
                     $upload_dir = wp_upload_dir(null);
                     /* append current time and part index with file name
                        Fixed inline images parse with same name images.png*/
                     $filename = time() . $part_index . '-' . sanitize_file_name($filename);
                     if (!file_exists($upload_dir['path'] . "/{$filename}")) {
                         $uploaded = wp_upload_bits($filename, null, $filedata);
                     } else {
                         $uploaded['error'] = false;
                         $uploaded['file'] = $upload_dir['path'] . "/{$filename}";
                         $uploaded['url'] = $upload_dir['url'] . "/{$filename}";
                     }
                     if (false == $uploaded['error']) {
                         rtmb_log("[Attachement Created] File:{$uploaded['file']} ; URL: {$uploaded['url']}", 'mail-attachement.txt');
                         $file = array();
                         $extn_array = explode('.', $filename);
                         $extn = $extn_array[count($extn_array) - 1];
                         $file['file'] = $uploaded['file'];
                         $file['url'] = $uploaded['url'];
                         $file['filename'] = $filename;
                         $file['extn'] = $extn;
                         $file['type'] = $ContentType;
                         if ($part->__isset('Content-ID')) {
                             $tmpval = $part->getHeader('Content-ID');
                             $file['Content-ID'] = trim($tmpval->getFieldValue(), '<>');
                         }
                         $response['attachements'][] = $file;
                     } else {
                         rt_log('Attachment Failed ... ' . esc_attr($filename) . "\r\n");
                         ob_start();
                         rt_log(var_export($uploaded, true));
                         $data = ob_get_clean();
                         rtmb_log("[Attachement Failed] Email: {$email};Message-Id: {$message->messageid}; Data : {$data} ", 'error-mail-attachement.txt');
                     }
                 }
             }
         }
     }
     return $response;
 }
Exemplo n.º 2
0
 function rt_send_email()
 {
     global $rt_mail_settings;
     $emailRows = $rt_mail_settings->get_new_sent_mail();
     if (empty($emailRows)) {
         return;
     }
     $rtZendEmail = new Rt_Zend_Mail();
     $accessTokenArray = array();
     $signature = '';
     foreach ($emailRows as $email) {
         // skip sending email filter.
         $do_send = apply_filters('rt_lib_before_sending_email', true, $email);
         if (!$do_send) {
             rt_log('Skip email : ' . var_export($email->id, true));
             $rt_mail_settings->update_sent_email($email->id, 'skip', 'no');
             continue;
         }
         rt_log('Sending email : ' . var_export($email->id, true));
         if (!isset($accessTokenArray[$email->fromemail])) {
             $email_type = '';
             $imap_server = '';
             $accessTokenArray[$email->fromemail] = array('token' => $rt_mail_settings->get_accesstoken_from_email($email->fromemail, $signature, $email_type, $imap_server), 'email_type' => $email_type, 'imap_server' => $imap_server);
         }
         if ($rt_mail_settings->update_sent_email($email->id, 'p', 'no') > 0) {
             $updateFlag = false;
             try {
                 $fromname = !empty($email->fromname) ? $email->fromname : get_bloginfo();
                 $result = $rtZendEmail->sendemail($fromname, $email->fromemail, $accessTokenArray[$email->fromemail]['token'], $accessTokenArray[$email->fromemail]['email_type'], $accessTokenArray[$email->fromemail]['imap_server'], $email->subject, $email->body, unserialize($email->toemail), unserialize($email->ccemail), unserialize($email->bccemail), unserialize($email->attachement), $email);
                 rt_log(var_export('Email id :' . $email->id . ' Status :' . $result, true));
                 if ($result) {
                     $updateFlag = true;
                 }
             } catch (Exception $e) {
                 $updateFlag = false;
             }
             if ($updateFlag) {
                 $rt_mail_settings->update_sent_email($email->id, 'yes', 'p');
             } else {
                 $rt_mail_settings->update_sent_email($email->id, 'error', 'p');
                 rt_log('Error: ' . esc_attr($email->id) . '<br />');
             }
         } else {
             rt_log('Error: ' . esc_attr($email->id) . '<br />');
         }
     }
 }