Index: branches/5.2.x/core/units/email_events/email_events_event_handler.php =================================================================== diff -u -N -r14851 -r14861 --- branches/5.2.x/core/units/email_events/email_events_event_handler.php (.../email_events_event_handler.php) (revision 14851) +++ branches/5.2.x/core/units/email_events/email_events_event_handler.php (.../email_events_event_handler.php) (revision 14861) @@ -1,6 +1,6 @@ CreateTextHtmlPart($message_body, $object->GetDBField('MessageType') == 'html'); + $log_fields_hash = Array ( + 'fromuser' => $from_name . ' (' . $from_email . ')', + 'addressto' => $to_name . ' (' . $to_email . ')', + 'subject' => $message_subject, + 'timestamp' => adodb_mktime(), + 'event' => $email_event_name, + 'EventParams' => serialize( $this->removeSendingParams($send_params) ), + ); + + $esender->setLogData($log_fields_hash); $event->status = $esender->Deliver() ? kEvent::erSUCCESS : kEvent::erFAIL; + } - if ( $event->status == kEvent::erSUCCESS ) { - // all keys, that are not used in email sending are written to log record - $send_keys = Array ('from_email', 'from_name', 'to_email', 'to_name', 'message'); - foreach ($send_keys as $send_key) { - unset($send_params[$send_key]); - } + /** + * Removes parameters, used during e-mail sending + * + * @param Array $params + * @return Array + * @access protected + */ + protected function removeSendingParams($params) + { + $send_keys = Array ('from_email', 'from_name', 'to_email', 'to_name', 'message'); - $fields_hash = Array ( - 'fromuser' => $from_name . ' (' . $from_email . ')', - 'addressto' => $to_name . ' (' . $to_email . ')', - 'subject' => $message_subject, - 'timestamp' => adodb_mktime(), - 'event' => $email_event_name, - 'EventParams' => serialize($send_params), - ); - - $this->Conn->doInsert($fields_hash, TABLE_PREFIX . 'EmailLog'); + foreach ($send_keys as $send_key) { + unset($params[$send_key]); } + + return $params; } function _getSendLanguage($send_params) Index: branches/5.2.x/core/install/install_schema.sql =================================================================== diff -u -N -r14856 -r14861 --- branches/5.2.x/core/install/install_schema.sql (.../install_schema.sql) (revision 14856) +++ branches/5.2.x/core/install/install_schema.sql (.../install_schema.sql) (revision 14861) @@ -76,6 +76,7 @@ SendRetries int(10) unsigned NOT NULL DEFAULT '0', LastSendRetry int(10) unsigned DEFAULT NULL, MailingId int(10) unsigned NOT NULL DEFAULT '0', + LogData text, PRIMARY KEY (EmailQueueId), KEY LastSendRetry (LastSendRetry), KEY SendRetries (SendRetries), Index: branches/5.2.x/core/install/upgrades.sql =================================================================== diff -u -N -r14856 -r14861 --- branches/5.2.x/core/install/upgrades.sql (.../upgrades.sql) (revision 14856) +++ branches/5.2.x/core/install/upgrades.sql (.../upgrades.sql) (revision 14861) @@ -2377,4 +2377,6 @@ INSERT INTO Permissions VALUES(DEFAULT, 'CATEGORY.REVISION.ADD', 11, 1, 0, 1); INSERT INTO Permissions VALUES(DEFAULT, 'CATEGORY.REVISION.HISTORY.VIEW', 11, 1, 0, 1); -INSERT INTO Permissions VALUES(DEFAULT, 'CATEGORY.REVISION.HISTORY.RESTORE', 11, 1, 0, 1); \ No newline at end of file +INSERT INTO Permissions VALUES(DEFAULT, 'CATEGORY.REVISION.HISTORY.RESTORE', 11, 1, 0, 1); + +ALTER TABLE EmailQueue ADD `LogData` TEXT; \ No newline at end of file Index: branches/5.2.x/core/kernel/utility/email_send.php =================================================================== diff -u -N -r14699 -r14861 --- branches/5.2.x/core/kernel/utility/email_send.php (.../email_send.php) (revision 14699) +++ branches/5.2.x/core/kernel/utility/email_send.php (.../email_send.php) (revision 14861) @@ -1,6 +1,6 @@ headers = Array (); $this->bodyPartNumber = false; - $this->parts = Array(); + $this->parts = Array (); $this->guessOptions = Array ( - 'attachments' => Array(), + 'attachments' => Array (), 'inline_attachments' => Array (), 'text_part' => false, 'html_part' => false, ); $this->SetCharset(null, true); + $this->_logData = Array (); } /** @@ -1984,14 +1992,20 @@ $composed = $this->GetHeadersAndBody($message_headers, $message_body); } - if ($composed) { - if ($immediate_send === true) { - $send_method = 'Send'.$this->sendMethod; + if ( $composed ) { + if ( $immediate_send === true ) { + $send_method = 'Send' . $this->sendMethod; $result = $this->$send_method($message_headers, $message_body); - if ($immediate_clear) { + if ( $result && $this->_logData ) { + // add e-mail log record + $this->Conn->doInsert($this->_logData, TABLE_PREFIX . 'EmailLog'); + } + + if ( $immediate_clear ) { $this->Clear(); } + return $result; } else { @@ -2002,12 +2016,14 @@ 'SendRetries' => 0, 'LastSendRetry' => 0, 'MailingId' => (int)$immediate_send, + 'LogData' => serialize($this->_logData), // remember e-mail log record ); + $fields_hash['MessageHeaders'] = serialize($message_headers); $fields_hash['MessageBody'] =& $message_body; - $this->Conn->doInsert($fields_hash, TABLE_PREFIX.'EmailQueue'); + $this->Conn->doInsert($fields_hash, TABLE_PREFIX . 'EmailQueue'); - if ($immediate_clear) { + if ( $immediate_clear ) { $this->Clear(); } } @@ -2017,4 +2033,15 @@ return $immediate_send !== true ? true : false; } + /** + * Sets log data + * + * @param string $log_data + * @return void + * @access public + */ + public function setLogData($log_data) + { + $this->_logData = $log_data; + } } \ No newline at end of file Index: branches/5.2.x/core/units/helpers/mailing_list_helper.php =================================================================== diff -u -N -r14628 -r14861 --- branches/5.2.x/core/units/helpers/mailing_list_helper.php (.../mailing_list_helper.php) (revision 14628) +++ branches/5.2.x/core/units/helpers/mailing_list_helper.php (.../mailing_list_helper.php) (revision 14861) @@ -1,6 +1,6 @@ SetTo($email, $email); - $esender->Deliver(null, $mailing_id, false); // 4. write to log $log_fields_hash = Array ( @@ -66,7 +65,8 @@ 'EventParams' => serialize( Array ('MailingId' => $mailing_id) ), ); - $this->Conn->doInsert($log_fields_hash, TABLE_PREFIX . 'EmailLog'); + $esender->setLogData($log_fields_hash); + $esender->Deliver(null, $mailing_id, false); } /** @@ -80,7 +80,7 @@ { $is_root = true; $email_address = $name = ''; - + if ( $mailing_data['PortalUserId'] > 0 ) { $sender =& $this->Application->recallObject('u.-item', null, Array ('skip_autoload' => true)); /* @var $sender UsersItem */ @@ -263,10 +263,12 @@ while ($i < $message_count) { $message[0] = unserialize($messages[$i]['MessageHeaders']); $message[1] =& $messages[$i]['MessageBody']; + + $esender->setLogData( unserialize($messages[$i]['LogData']) ); $delivered = $esender->Deliver($message, true); // immediate send! if ($delivered) { - // send succseeded, delete from queue + // send succeeded, delete from queue $sql = 'DELETE FROM ' . $queue_table . ' WHERE EmailQueueId = ' . $messages[$i]['EmailQueueId']; $this->Conn->Query($sql);