/** * 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; }
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 />'); } } }