Я хочу отправить письмо всем сотрудникам, которые работают в этом отделе, когда Клиент добавляет тикет

У меня есть билетная система. Поэтому я хочу, чтобы всякий раз, когда пользователь создает новый билет, письмо будет отправлено всем сотрудникам, которые работают в этом отделе.

Ниже приведен код моей модели:

public function ticket_email() 
{

        $query = $this->db->select('staff_sign_up.email')
                            ->distinct('staff_sign_up.email')
                           ->from('staff_sign_up')
                        ->join('view_ticket','view_ticket.initial_department=staff_sign_up.department_id')
                           ->get();
        return $query->result();
    }

Эта модель получает все почтовые идентификаторы тех сотрудников, которые работают в этом отделе.

Ниже приведен код моего контроллера:

public function ticket_send() {
        $subject = 'A Ticket has been added please check & reply asap';
        $message = '
   <h3 align = "center">Ticket Details</h3>
    <table border = "1" width = "100%" cellpadding = "5">
     <tr>
      <td width = "30%">Subject</td>
      <td width = "70%">' . $this->input->post("subject") . '</td>
     </tr>
     <tr>
      <td width = "30%">Description</td>
      <td width = "70%">' . $this->input->post("description") . '</td>
     </tr>
    </table>
   ';
        $config = Array(
            'protocol' => 'smtp',
            'smtp_host' => 'ssl://smtp.googlemail.com',
            'smtp_port' => 465,
            'smtp_user' => '******@gmail.com',
            'smtp_pass' => '*******',
            'mailtype' => 'html',
            'charset' => 'iso-8859-1',
            'wordwrap' => TRUE
        );
        $this->load->library('email');
        $this->email->initialize($config);
        $this->email->set_newline("\r\n");
        $this->email->from('[email protected]', 'admin');
        $this->email->to($this->auth_model->ticket_email());
        $this->email->subject($subject);
        $this->email->message($message);
        if ($this->email->send()) {
            $this->session->set_flashdata('message', 'Your ticket has been generated,please wait sometime for reply');
        } else {
            show_error($this->email->print_debugger());
        }
    }

Итак, это контроллер, который должен отправлять письма всем тем сотрудникам, которые работают в этом отделе, с деталями тикета.

У меня такие ошибки:

object of stdclass could not be converted into string

а также

preg_match expects parameter 2 to be string but object given

Я использую CodeIgniter 3 и новичок.

Изменить после комментария Алекса:

result_array возвращает следующий элемент: -

Array ( [0] => Array ( [email] => *****@gmail.com ) [1] => Array ( [email] => *******@example.com ) [2] => Array ( [email] => *******@gmail.com ) [3] => Array ( [email] => ******@gmail.com ) )

После последнего обновления от Алекса:

Я хочу отправить письмо всем сотрудникам, которые работают в этом отделе, когда Клиент добавляет тикет

Вы проверили, что возвращает ticket_email()? Это не строка.

Sami Kuhmonen 18.07.2018 08:27

эй, удали свой адрес электронной почты и пароль из кода.

AbdulAhmad Matin 18.07.2018 08:29

А потом смени свой пароль

Strawberry 18.07.2018 08:51

Я сделал print_r, и он возвращает класс объекта std.

Manojit Chakraborty 18.07.2018 08:52

измените его на result_array() и снова выполните print_r(), а затем сбросьте его в pastebin или imgur (вы можете удалить электронные письма с помощью краски или чего-то еще, если вы не используете фиктивные данные). нам просто нужно посмотреть, как он отформатирован; пары строк данных хватит.

Alex 18.07.2018 08:59

Да. Он показывает следующий результат: - Массив ([0] => Массив ([email] => *****@gmail.com) [1] => Массив ([email] => ****** *@example.com) [2] => Массив ([email] => *******@gmail.com) [3] => Массив ([email] => ****** @ gmail .com))

Manojit Chakraborty 18.07.2018 09:19

Пожалуйста, будьте более осторожны с защитой личных данных вашего клиента - нет никаких оправданий для размещения их здесь, поскольку вы должны делать это намеренно, когда публикуете изображение. Это не ваши данные, к которым следует относиться небрежно. Я посмотрю, сможет ли разработчик Stack Overflow удалить изображение из вашей истории вопросов.

halfer 01.08.2018 14:29
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
7
88
2

Ответы 2

Вы можете попробовать изменить хост smtp на ssl: //smtp.gmail.com

Если я отправлю исходное письмо, оно будет отправлено. Я не думаю, что это будет проблемой, но я все равно попробую, спасибо за ввод.

Manojit Chakraborty 18.07.2018 09:46

Раз уж в комментариях вроде не получается: $this->auth_model->ticket_email() по вашей схеме возвращает объект результата. Вам нужно получить строку (или массив), которая выглядит так:

$this->email->to('[email protected], [email protected], [email protected]');

ИЛИ ЖЕ

$this->email->to(
            array('[email protected]', '[email protected]', '[email protected]')
);

https://www.codeigniter.com/user_guide/libraries/email.html#CI_Email::to

Так что, по крайней мере, вы должны вернуть result_array(), но есть вероятность, что вам придется проделать некоторую работу, чтобы преобразовать его в массив, который примет CI.


Обновлять

public function ticket_email() 
{

        $query = $this->db->select('staff_sign_up.email')
                            ->distinct('staff_sign_up.email')
                           ->from('staff_sign_up')
                        ->join('view_ticket','view_ticket.initial_department=staff_sign_up.department_id')
                           ->get();
        if ($query->num_rows() == 0) {
            show_error('whatever');
        }
        return array_column($query->result_array(), 'email'); // make array CI email lib can understand
    }

а все остальное можно оставить как есть. Хотя я бы посоветовал проверить, есть ли num_rows() > 0, и справиться с обстоятельствами, когда это не так.

Да. Он показывает следующий результат: - Массив ([0] => Массив ([email] => *****@gmail.com) [1] => Массив ([email] => ****** *@example.com) [2] => Массив ([email] => *******@gmail.com) [3] => Массив ([email] => ****** @ gmail .com))

Manojit Chakraborty 18.07.2018 09:40

Привет, @alex, я обновил свой код, не могли бы вы проверить, в чем проблема. Раньше я использовал foreach для отправки почты, но возникла проблема, заключающаяся в том, что почта отправлялась только одному сотруднику.

Manojit Chakraborty 18.07.2018 12:11

Это совершенно другая проблема, которую я не могу решить в комментариях, но по сути вам нужно настроить почтовую систему для loclhost. Есть много информации об этом в другом месте в стеке.

Alex 18.07.2018 19:33

также я не уверен, заметили ли вы, но электронные письма клиентов находятся на изображении, которое вы разместили

Alex 18.07.2018 20:01

Да, я вижу, что все электронные письма приходят, поэтому модель работает, и код работает, спасибо за это, но я говорю об успехе, когда отправляю письмо одному конкретному человеку. Итак, я не понимаю, почему я не могу отправлять почту нескольким людям одновременно.

Manojit Chakraborty 19.07.2018 07:29

Нет, я имел в виду, что вы можете вычеркнуть их, ха-ха. Я действительно не знаю, почему он не работает для нескольких, но работает для одного tbh.

Alex 19.07.2018 07:31

Он работает под одним, но не работает более чем с одним. Не знаю почему. @Alex, в любом случае, спасибо, ты мне очень помог.

Manojit Chakraborty 19.07.2018 08:16

Я проголосовал за вас вчера, так как вы решили мою настоящую проблему, и я также заблокировал эти электронные письма. Спасибо за все, хорошего дня или ночи.

Manojit Chakraborty 19.07.2018 08:24

Другие вопросы по теме