Index: branches/5.3.x/core/kernel/utility/email.php =================================================================== diff -u -N -r15938 -r15944 --- branches/5.3.x/core/kernel/utility/email.php (.../email.php) (revision 15938) +++ branches/5.3.x/core/kernel/utility/email.php (.../email.php) (revision 15944) @@ -1,6 +1,6 @@ logData = array(); + $this->fromEmail = $this->fromName = ''; $this->Application->removeObject('u.email-from'); @@ -233,14 +242,32 @@ $this->_processRecipients(); $this->_changeLanguage(false); + if ( $this->_storeEmailLog() ) { + // 1. prepare log + $this->logData = Array ( + 'From' => $this->fromName . ' (' . $this->fromEmail . ')', + 'To' => $this->toName . ' (' . $this->toEmail . ')', + 'OtherRecipients' => serialize($this->recipients), + 'Status' => EmailLogStatus::SENT, + 'ErrorMessage' => '', + 'SentOn' => TIMENOW, + 'TemplateName' => $this->emailTemplate->GetDBField('TemplateName'), + 'EventType' => $this->emailTemplate->GetDBField('Type'), + 'EventParams' => serialize($this->_getCustomParams()), + 'ToUserId' => $this->recipientUserId, + 'ItemPrefix' => $this->getItemPrefix(), + 'ItemId' => isset($this->params['item_id']) ? $this->params['item_id'] : null, + ); + + $this->params['email_access_key'] = $this->_generateAccessKey(); + } + // 1. set headers try { $message_headers = $this->_getHeaders(); } catch ( Exception $e ) { - trigger_error('Error parsing e-mail message headers', E_USER_WARNING); - - return false; + return $this->setError('Error parsing e-mail message headers'); } $message_subject = isset($message_headers['Subject']) ? $message_headers['Subject'] : 'Mail message'; @@ -251,22 +278,7 @@ } if ( $this->_storeEmailLog() ) { - // 2. prepare log - $log_fields_hash = Array ( - 'From' => $this->fromName . ' (' . $this->fromEmail . ')', - 'To' => $this->toName . ' (' . $this->toEmail . ')', - 'OtherRecipients' => serialize($this->recipients), - 'Subject' => $message_subject, - 'SentOn' => TIMENOW, - 'TemplateName' => $this->emailTemplate->GetDBField('TemplateName'), - 'EventType' => $this->emailTemplate->GetDBField('Type'), - 'EventParams' => serialize($this->_getCustomParams()), - 'ToUserId' => $this->recipientUserId, - 'ItemPrefix' => $this->getItemPrefix(), - 'ItemId' => isset($this->params['item_id']) ? $this->params['item_id'] : null, - ); - - $this->params['email_access_key'] = $this->_generateAccessKey($log_fields_hash); + $this->logData['Subject'] = $message_subject; } // 3. set body @@ -275,15 +287,11 @@ $plain_message_body = $this->_getMessageBody(false); } catch ( Exception $e ) { - trigger_error('Error parsing e-mail message body', E_USER_WARNING); - - return false; + return $this->setError('Error parsing e-mail message body'); } if ( $html_message_body === false && $plain_message_body === false ) { - trigger_error('Message template is empty (maybe after parsing).', E_USER_WARNING); - - return false; + return $this->setError('Message template is empty (maybe after parsing).'); } if ( $html_message_body !== false ) { @@ -298,10 +306,10 @@ if ( $this->_storeEmailLog() ) { // 4. set log - $log_fields_hash['HtmlBody'] = $html_message_body; - $log_fields_hash['TextBody'] = $plain_message_body; - $log_fields_hash['AccessKey'] = $this->params['email_access_key']; - $this->sender->setLogData($log_fields_hash); + $this->logData['HtmlBody'] = $html_message_body; + $this->logData['TextBody'] = $plain_message_body; + $this->logData['AccessKey'] = $this->params['email_access_key']; + $this->sender->setLogData($this->logData); } $delivery = isset($this->params['delivery']) ? $this->params['delivery'] : $this->Application->ConfigValue('EmailDelivery'); @@ -339,19 +347,36 @@ } /** + * Marks e-mail sending as failed. + * + * @param string $error_message Error message. + * + * @return boolean + */ + protected function setError($error_message) + { + if ( $this->_storeEmailLog() ) { + $this->logData['Status'] = EmailLogStatus::ERROR; + $this->logData['ErrorMessage'] = $error_message; + $this->Conn->doInsert($this->logData, TABLE_PREFIX . 'EmailLog'); + } + + return false; + } + + /** * Generates access key for accessing e-mail later * - * @param Array $log_fields_hash * @return string * @access protected */ - protected function _generateAccessKey($log_fields_hash) + protected function _generateAccessKey() { $ret = ''; $use_fields = Array ('From', 'To', 'Subject'); foreach ($use_fields as $use_field) { - $ret .= $log_fields_hash[$use_field] . ':'; + $ret .= $this->logData[$use_field] . ':'; } return md5($ret . microtime(true));