Index: trunk/core/units/email_events/email_events_event_handler.php =================================================================== diff -u -N -r8397 -r8594 --- trunk/core/units/email_events/email_events_event_handler.php (.../email_events_event_handler.php) (revision 8397) +++ trunk/core/units/email_events/email_events_event_handler.php (.../email_events_event_handler.php) (revision 8594) @@ -20,7 +20,7 @@ $permissions = Array( 'OnFrontOnly' => Array('self' => 'edit'), 'OnSaveSelected' => Array('self' => 'view'), - + 'OnProcessEmailQueue' => Array('self' => 'add|edit'), ); $this->permMapping = array_merge($this->permMapping, $permissions); @@ -254,7 +254,7 @@ ' ' 'GetDBField('ReplacementTags'); $replacement_tags = $replacement_tags ? unserialize($replacement_tags) : Array (); $replacement_tags = array_merge_recursive2($default_replacement_tags, $replacement_tags); @@ -281,6 +281,8 @@ $this->Application->InitParser(); $parser_params = $this->Application->Parser->Params; // backup parser params $this->Application->Parser->Params = array_merge_recursive2($this->Application->Parser->Params, $direct_params); + + $message = implode('&|&', explode("\n\n", $message, 2)); // preserves double \n in case when tag is located in subject field $message = $this->Application->Parser->Parse($message, 'email_template', 0); $this->Application->Parser->Params = $parser_params; // restore parser params @@ -290,7 +292,7 @@ // 3. separate headers from body $message_headers = Array (); - list($headers, $message_body) = explode("\n\n", $message, 2); + list($headers, $message_body) = explode('&|&', $message, 2); $headers = explode("\n", $headers); foreach ($headers as $header) { @@ -378,7 +380,7 @@ $this->Application->removeObject('u.email-from'); $this->Application->removeObject('u.email-to'); } - + /** * Process emails from queue * @@ -390,7 +392,7 @@ if ($deliver_count === false) { $deliver_count = 10; // 10 emails per script run (if not specified directly) } - + $processing_type = $this->Application->GetVar('type'); if ($processing_type = 'return_progress') { $email_queue_progress = $this->Application->RecallVar('email_queue_progress'); @@ -406,13 +408,13 @@ list ($emails_sent, $total_emails) = explode(':', $email_queue_progress); } } - + $sql = 'SELECT * FROM '.TABLE_PREFIX.'EmailQueue WHERE (SendRetries < 5) AND (LastSendRetry < '.(adodb_mktime() - 7200).') LIMIT 0,'.$deliver_count; $messages = $this->Conn->Query($sql); - + $message_count = count($messages); if (!$message_count) { // no messages left to send in queue @@ -422,17 +424,17 @@ } return ; } - + $esender =& $this->Application->recallObject('EmailSender'); /* @var $esender kEmailSendingHelper */ - + $i = 0; $message = Array (); while ($i < $message_count) { $message[0] = unserialize($messages[$i]['MessageHeaders']); $message[1] =& $messages[$i]['MessageBody']; $delivered = $esender->Deliver($message, true); // immediate send! - + if ($delivered) { // send succseeded, delete from queue $sql = 'DELETE FROM '.TABLE_PREFIX.'EmailQueue @@ -448,14 +450,14 @@ } $i++; } - + if ($processing_type = 'return_progress') { $emails_sent += $message_count; if ($emails_sent >= $total_emails) { $this->Application->RemoveVar('email_queue_progress'); $this->Application->Redirect($this->Application->GetVar('finish_template')); } - + $this->Application->StoreVar('email_queue_progress', $emails_sent.':'.$total_emails); $event->status = erSTOP; echo ($emails_sent / $total_emails) * 100;