У меня есть билетная система. Поэтому я хочу, чтобы всякий раз, когда пользователь создает новый билет, письмо будет отправлено всем сотрудникам, которые работают в этом отделе.
Ниже приведен код моей модели:
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 ) )
После последнего обновления от Алекса:
эй, удали свой адрес электронной почты и пароль из кода.
А потом смени свой пароль
Я сделал print_r, и он возвращает класс объекта std.
измените его на result_array() и снова выполните print_r(), а затем сбросьте его в pastebin или imgur (вы можете удалить электронные письма с помощью краски или чего-то еще, если вы не используете фиктивные данные). нам просто нужно посмотреть, как он отформатирован; пары строк данных хватит.
Да. Он показывает следующий результат: - Массив ([0] => Массив ([email] => *****@gmail.com) [1] => Массив ([email] => ****** *@example.com) [2] => Массив ([email] => *******@gmail.com) [3] => Массив ([email] => ****** @ gmail .com))
Пожалуйста, будьте более осторожны с защитой личных данных вашего клиента - нет никаких оправданий для размещения их здесь, поскольку вы должны делать это намеренно, когда публикуете изображение. Это не ваши данные, к которым следует относиться небрежно. Я посмотрю, сможет ли разработчик Stack Overflow удалить изображение из вашей истории вопросов.






Вы можете попробовать изменить хост smtp на ssl: //smtp.gmail.com
Если я отправлю исходное письмо, оно будет отправлено. Я не думаю, что это будет проблемой, но я все равно попробую, спасибо за ввод.
Раз уж в комментариях вроде не получается: $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))
Привет, @alex, я обновил свой код, не могли бы вы проверить, в чем проблема. Раньше я использовал foreach для отправки почты, но возникла проблема, заключающаяся в том, что почта отправлялась только одному сотруднику.
Это совершенно другая проблема, которую я не могу решить в комментариях, но по сути вам нужно настроить почтовую систему для loclhost. Есть много информации об этом в другом месте в стеке.
также я не уверен, заметили ли вы, но электронные письма клиентов находятся на изображении, которое вы разместили
Да, я вижу, что все электронные письма приходят, поэтому модель работает, и код работает, спасибо за это, но я говорю об успехе, когда отправляю письмо одному конкретному человеку. Итак, я не понимаю, почему я не могу отправлять почту нескольким людям одновременно.
Нет, я имел в виду, что вы можете вычеркнуть их, ха-ха. Я действительно не знаю, почему он не работает для нескольких, но работает для одного tbh.
Он работает под одним, но не работает более чем с одним. Не знаю почему. @Alex, в любом случае, спасибо, ты мне очень помог.
Я проголосовал за вас вчера, так как вы решили мою настоящую проблему, и я также заблокировал эти электронные письма. Спасибо за все, хорошего дня или ночи.
Вы проверили, что возвращает
ticket_email()? Это не строка.