/** * Connects to the SMTP server and sends the queued message. * * @param string $recipient The recipient of this message * @param string $text_headers The full headers of this message * @param string $body The full body of this message * @param string $status The status of this message * @return true, or a PEAR_Error object */ private function _sendEmail($recipient, $text_headers, &$body, $status) { $header_names = Mime_Helper::getHeaderNames($text_headers); $_headers = self::_getHeaders($text_headers, $body); $headers = array(); foreach ($_headers as $lowercase_name => $value) { // need to remove the quotes to avoid a parsing problem // on senders that have extended characters in the first // or last words in their sender name if ($lowercase_name == 'from') { $value = Mime_Helper::removeQuotes($value); } $value = Mime_Helper::encode($value); // add the quotes back if ($lowercase_name == 'from') { $value = Mime_Helper::quoteSender($value); } $headers[$header_names[$lowercase_name]] = $value; } // remove any Reply-To:/Return-Path: values from outgoing messages unset($headers['Reply-To']); unset($headers['Return-Path']); // mutt sucks, so let's remove the broken Mime-Version header and add the proper one if (in_array('Mime-Version', array_keys($headers))) { unset($headers['Mime-Version']); $headers['MIME-Version'] = '1.0'; } $mail = Mail::factory('smtp', Mail_Helper::getSMTPSettings()); $res = $mail->send($recipient, $headers, $body); if (Misc::isError($res)) { Logger::app()->error($res->getMessage(), array('debug' => $res->getDebugInfo())); return $res; } return true; }
/** * Connects to the SMTP server and sends the queued message. * * @param string $recipient The recipient of this message * @param string $text_headers The full headers of this message * @param string $body The full body of this message * @param string $status The status of this message * @return true, or a PEAR_Error object */ private function _sendEmail($recipient, $text_headers, &$body, $status) { $header_names = Mime_Helper::getHeaderNames($text_headers); $_headers = self::_getHeaders($text_headers, $body); $headers = array(); foreach ($_headers as $lowercase_name => $value) { // need to remove the quotes to avoid a parsing problem // on senders that have extended characters in the first // or last words in their sender name if ($lowercase_name == 'from') { $value = Mime_Helper::removeQuotes($value); } $value = Mime_Helper::encode($value); // add the quotes back if ($lowercase_name == 'from') { $value = Mime_Helper::quoteSender($value); } $headers[$header_names[$lowercase_name]] = $value; } // remove any Reply-To:/Return-Path: values from outgoing messages unset($headers['Reply-To']); unset($headers['Return-Path']); // mutt sucks, so let's remove the broken Mime-Version header and add the proper one if (in_array('Mime-Version', array_keys($headers))) { unset($headers['Mime-Version']); $headers['MIME-Version'] = '1.0'; } $mail = Mail::factory('smtp', Mail_Helper::getSMTPSettings()); $res = $mail->send($recipient, $headers, $body); if (Misc::isError($res)) { // special handling of errors when the mail server is down $msg = $res->getMessage(); $cant_notify = $status == 'error' || strstr($msg, 'unable to connect to smtp server') || stristr($msg, 'Failed to connect to') !== false; Error_Handler::logError(array($msg, $res->getDebugInfo()), __FILE__, __LINE__, !$cant_notify); return $res; } return true; }
/** * Method used to save a copy of the given email to a configurable address. * * @param array $email The email to save. */ public static function saveOutgoingEmailCopy(&$email) { // check early: do we really want to save every outgoing email? $setup = Setup::load(); $save_outgoing_email = !empty($setup['smtp']['save_outgoing_email']) && $setup['smtp']['save_outgoing_email'] == 'yes'; if (!$save_outgoing_email || empty($setup['smtp']['save_address'])) { return false; } static $subjects = array(); $hdrs =& $email['headers']; $body =& $email['body']; $issue_id = $email['maq_iss_id']; $sender_usr_id = $email['maq_usr_id']; // ok, now parse the headers text and build the assoc array $full_email = $hdrs . "\n\n" . $body; $structure = Mime_Helper::decode($full_email, false, false); $_headers =& $structure->headers; $header_names = Mime_Helper::getHeaderNames($hdrs); $headers = array(); foreach ($_headers as $lowercase_name => $value) { // need to remove the quotes to avoid a parsing problem // on senders that have extended characters in the first // or last words in their sender name if ($lowercase_name == 'from') { $value = Mime_Helper::removeQuotes($value); } $value = Mime_Helper::encode($value); // add the quotes back if ($lowercase_name == 'from') { $value = Mime_Helper::quoteSender($value); } $headers[$header_names[$lowercase_name]] = $value; } // remove any Reply-To:/Return-Path: values from outgoing messages unset($headers['Reply-To']); unset($headers['Return-Path']); // prevent duplicate emails from being sent out... $subject = @$headers['Subject']; if (@in_array($subject, $subjects)) { return false; } // replace the To: header with the requested address $address = $setup['smtp']['save_address']; $headers['To'] = $address; // add specialized headers if they are not already added if (empty($headers['X-Eventum-Type'])) { $headers += self::getSpecializedHeaders($issue_id, $email['maq_type'], $headers, $sender_usr_id); } $params = self::getSMTPSettings($address); $mail = Mail::factory('smtp', $params); $res = $mail->send($address, $headers, $body); if (Misc::isError($res)) { Error_Handler::logError(array($res->getMessage(), $res->getDebugInfo()), __FILE__, __LINE__); } $subjects[] = $subject; }