first(); return $emails; } /** * Fetching comapny name to send mail. * * @return type */ public function company() { $company = Company::Where('id', '=', '1')->first(); if ($company->company_name == null) { $company = 'Support Center'; } else { $company = $company->company_name; } return $company; } /** * Function to choose from address. * * @param type Reg $reg * @param type Department $dept_id * * @return type integer */ public function mailfrom($reg, $dept_id) { $email_id = ''; $emails = Emails::where('department', '=', $dept_id)->first(); $email = Email::find(1); if ($emails && $emails->sending_status) { $email_id = $emails->id; } else { $email_id = $email->sys_email; } return $email_id; } public function sendmail($from, $to, $message, $template_variables) { $this->setQueue(); $job = new \App\Jobs\SendEmail($from, $to, $message, $template_variables); $this->dispatch($job); } public function sendEmail($from, $to, $message, $template_variables) { $from_address = $this->fetch_smtp_details($from); if ($from_address == null) { throw new Exception(Lang::get('lang.system-email-not-configured')); } $this->setMailConfig($from_address); $recipants = $this->checkElement('email', $to); $recipantname = $this->checkElement('name', $to); $cc = $this->checkElement('cc', $to); $bc = $this->checkElement('bc', $to); $subject = $this->checkElement('subject', $message); $content = $this->checkElement('body', $message); $template_type = $this->checkElement('scenario', $message); $attachment = $this->checkElement('attachments', $message); $agent = null; // template variables if (Auth::user()) { $agent = Auth::user()->user_name; } $ticket_agent_name = $this->checkElement('ticket_agent_name', $template_variables); $ticket_number = $this->checkElement('ticket_number', $template_variables); $ticket_client_name = $this->checkElement('ticket_client_name', $template_variables); $ticket_client_email = $this->checkElement('ticket_client_email', $template_variables); $ticket_body = $this->checkElement('ticket_body', $template_variables); $ticket_assigner = $this->checkElement('ticket_assigner', $template_variables); $ticket_link_with_number = $this->checkElement('ticket_link_with_number', $template_variables); $system_from = $this->checkElement('system_from', $template_variables); if ($system_from === '') { $system_from = $this->company(); } $system_link = $this->checkElement('system_link', $template_variables); if ($system_link === '') { $system_link = \Config::get('app.url'); } $ticket_link = $this->checkElement('ticket_link', $template_variables); $system_error = $this->checkElement('system_error', $template_variables); $agent_sign = $this->checkElement('agent_sign', $template_variables); $department_sign = $this->checkElement('department_sign', $template_variables); $password_reset_link = $this->checkElement('password_reset_link', $template_variables); $user_password = $this->checkElement('user_password', $template_variables); $merged_ticket_numbers = $this->checkElement('merged_ticket_numbers', $template_variables); $email_address = $this->checkElement('email_address', $template_variables); $user = $this->checkElement('user', $template_variables); $status = \DB::table('settings_email')->first(); $template = TemplateType::where('name', '=', $template_type)->first(); $set = \App\Model\Common\TemplateSet::where('name', '=', $status->template)->first(); if ($template) { if (isset($set['id'])) { $template_data = \App\Model\Common\Template::where('set_id', '=', $set->id)->where('type', '=', $template->id)->first(); $contents = $template_data->message; if ($template_data->variable == 1) { if ($template_data->subject) { $subject = $template_data->subject; if ($ticket_number != null) { $subject = $subject.' [#'.$ticket_number.']'; } } else { $subject = $message['subject']; } } else { $subject = $message['subject']; } } else { $contents = null; $subject = null; } $variables = ['{!!$user!!}', '{!!$agent!!}', '{!!$ticket_number!!}', '{!!$content!!}', '{!!$from!!}', '{!!$ticket_agent_name!!}', '{!!$ticket_client_name!!}', '{!!$ticket_client_email!!}', '{!!$ticket_body!!}', '{!!$ticket_assigner!!}', '{!!$ticket_link_with_number!!}', '{!!$system_error!!}', '{!!$agent_sign!!}', '{!!$department_sign!!}', '{!!$password_reset_link!!}', '{!!$email_address!!}', '{!!$user_password!!}', '{!!$system_from!!}', '{!!$system_link!!}', '{!!$ticket_link!!}', '{!!$merged_ticket_numbers!!}']; $data = [$user, $agent, $ticket_number, $content, $from, $ticket_agent_name, $ticket_client_name, $ticket_client_email, $ticket_body, $ticket_assigner, $ticket_link_with_number, $system_error, $agent_sign, $department_sign, $password_reset_link, $email_address, $user_password, $system_from, $system_link, $ticket_link, $merged_ticket_numbers]; foreach ($variables as $key => $variable) { $messagebody = str_replace($variables[$key], $data[$key], $contents); $contents = $messagebody; } if ($template_type == 'ticket-reply-agent') { $line = '---Reply above this line---

'; $content = $line.$messagebody; } else { $content = $messagebody; } } $send = $this->laravelMail($recipants, $recipantname, $subject, $content, $cc, $attachment); return $send; } public function setMailConfig($from_address) { $username = $from_address->email_address; $fromname = $from_address->email_name; $password = $from_address->password; $smtpsecure = $from_address->sending_encryption; $host = $from_address->sending_host; $port = $from_address->sending_port; $protocol = $from_address->sending_protocol; $this->setServices($from_address->id, $protocol); if ($protocol == 'mail') { $username = ''; $fromname = ''; $host = ''; $smtpsecure = ''; $port = ''; } $configs = [ 'username' => $username, 'from' => ['address' => $username, 'name' => $fromname], 'password' => $password, 'encryption' => $smtpsecure, 'host' => $host, 'port' => $port, 'driver' => $protocol, ]; foreach ($configs as $key => $config) { if (is_array($config)) { foreach ($config as $from) { \Config::set('mail.'.$key, $config); } } else { \Config::set('mail.'.$key, $config); } } } public function setServices($emailid, $protocol) { $service = new \App\Model\MailJob\FaveoMail(); $services = $service->where('email_id', $emailid)->lists('value', 'key')->toArray(); $controller = new \App\Http\Controllers\Admin\helpdesk\EmailsController(); $controller->setServiceConfig($protocol, $services); } public function checkElement($element, $array) { $value = ''; if (is_array($array)) { if (array_key_exists($element, $array)) { $value = $array[$element]; } } return $value; } public function laravelMail($to, $toname, $subject, $data, $cc, $attach) { //dd($to, $toname, $subject, $data, $cc, $attach); //dd(\Config::get('mail')); //dd($attach); $mail = Mail::send('emails.mail', ['data' => $data], function ($m) use ($to, $subject, $toname, $cc, $attach) { $m->to($to, $toname)->subject($subject); if ($cc != null) { foreach ($cc as $collaborator) { //mail to collaborators $collab_user_id = $collaborator->user_id; $user_id_collab = User::where('id', '=', $collab_user_id)->first(); $collab_email = $user_id_collab->email; $m->cc($collab_email); } } // $mail->addBCC($bc); $size = count($attach); if ($size > 0) { for ($i = 0; $i < $size; $i++) { if (is_array($attach) && array_key_exists($i, $attach)) { $mode = 'normal'; if (is_array($attach[$i]) && array_key_exists('mode', $attach[$i])) { $mode = $attach[$i]['mode']; } $file = $attach[$i]['file_path']; $name = $attach[$i]['file_name']; $mime = $attach[$i]['mime']; $this->attachmentMode($m, $file, $name, $mime, $mode); } } } }); if (is_object($mail) || (is_object($mail) && $mail->getStatusCode() == 200)) { $mail = 1; } return $mail; } public function setQueue() { $short = 'database'; $field = [ 'driver' => 'database', 'table' => 'jobs', 'queue' => 'default', 'expire' => 60, ]; $queue = new \App\Model\MailJob\QueueService(); $active_queue = $queue->where('status', 1)->first(); if ($active_queue) { $short = $active_queue->short_name; $fields = new \App\Model\MailJob\FaveoQueue(); $field = $fields->where('service_id', $active_queue->id)->lists('value', 'key')->toArray(); } $this->setQueueConfig($short, $field); } public function setQueueConfig($short, $field) { \Config::set('queue.default', $short); foreach ($field as $key => $value) { \Config::set("queue.connections.$short.$key", $value); } } public function attachmentMode($message, $file, $name, $mime, $mode) { if ($mode == 'data') { return $message->attachData(base64_decode($file, true), $name, ['mime' => $mime]); } return $message->attach($file, ['as' => $name, 'mime' => $mime]); } }