/** * Method used to build a properly encoded email address that will be * used by the email/note routing system. * * @param integer $issue_id The issue ID * @param string $sender The email address of the sender * @param string $type Whether this is a note or email routing message * @return string The properly encoded email address */ public static function getFixedFromHeader($issue_id, $sender, $type) { $setup = Setup::get(); if ($type == 'issue') { $routing = 'email_routing'; } else { $routing = 'note_routing'; } $project_id = Issue::getProjectID($issue_id); // if sender is empty, get project email address if (empty($sender)) { $project_info = Project::getOutgoingSenderAddress($project_id); $info = array('sender_name' => $project_info['name'], 'email' => $project_info['email']); // if no project name, use eventum wide sender name if (empty($info['sender_name'])) { $setup_sender_info = Mail_Helper::getAddressInfo($setup['smtp']['from']); $info['sender_name'] = $setup_sender_info['sender_name']; } } else { $info = Mail_Helper::getAddressInfo($sender); } // allow flags even without routing enabled if (!empty($setup[$routing]['recipient_type_flag'])) { $flag = '[' . $setup[$routing]['recipient_type_flag'] . '] '; } else { $flag = ''; } if ($setup[$routing]['status'] != 'enabled') { // let's use the custom outgoing sender address $project_info = Project::getOutgoingSenderAddress($project_id); if (empty($project_info['email'])) { /// no project email, use main email address $from_email = $setup['smtp']['from']; } else { $from_email = $project_info['email']; } } else { $from_email = $setup[$routing]['address_prefix'] . $issue_id . '@' . $setup[$routing]['address_host']; } if (empty($info['sender_name'])) { // no sender name, check if this email address belongs to a user and if so use that $usr_id = User::getUserIDByEmail($info['email']); if (!empty($usr_id)) { $info['sender_name'] = User::getFullName($usr_id); } else { // no name exists, use email address for name as well $info['sender_name'] = $info['email']; } } // also check where we need to append/prepend a special string to the sender name if (substr($info['sender_name'], strlen($info['sender_name']) - 1) == '"') { if ($setup[$routing]['flag_location'] == 'before') { $info['sender_name'] = '"' . $flag . substr($info['sender_name'], 1); } else { $info['sender_name'] = substr($info['sender_name'], 0, strlen($info['sender_name']) - 1) . ' ' . trim($flag) . '"'; } } else { if ($setup[$routing]['flag_location'] == 'before') { $info['sender_name'] = '"' . $flag . $info['sender_name'] . '"'; } else { $info['sender_name'] = '"' . $info['sender_name'] . ' ' . trim($flag) . '"'; } } $from = Mail_Helper::getFormattedName($info['sender_name'], $from_email); return Mime_Helper::encodeAddress(trim($from)); }