当客户添加工单时,我想向在该部门工作的所有员工发送邮件
Posted
技术标签:
【中文标题】当客户添加工单时,我想向在该部门工作的所有员工发送邮件【英文标题】:I want to send mail to all the employees who work on that department when a Client adds a ticket 【发布时间】:2018-12-25 22:52:12 【问题描述】:我有一个票务系统。因此,我希望每当用户创建新工单时,都会向在该部门工作的所有员工发送一封邮件。
以下是我的模型代码:
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();
此模型正在获取在该部门工作的员工的所有邮件 ID。
以下是我的控制器代码:
public function ticket_send()
$subject = 'A Ticket has been added please check & reply asap';
$message = '
<h3 align="center">Ticket Details</h3>
<table border="1" cellpadding="5">
<tr>
<td >Subject</td>
<td >' . $this->input->post("subject") . '</td>
</tr>
<tr>
<td >Description</td>
<td >' . $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('manojit.chakraborty58@gmail.com', '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());
因此,这是控制器应该向在该部门工作的所有员工发送带有工单详细信息的邮件。
我遇到了这些错误:
stdclass的对象不能转换成字符串
和
preg_match 期望参数 2 是字符串,但给定对象
我正在使用 CodeIgniter 3 并且是初学者。
在 Alex 发表评论后编辑:
result_array 正在返回以下项目:-
Array ( [0] => Array ( [email] => *****@gmail.com ) [1] => Array ( [email] => *******@example.com ) [2] => Array ( [email] => *******@gmail.com ) [3] => Array ( [email] => ******@gmail.com ) )
在 Alex 的最新更新之后:
【问题讨论】:
您检查过ticket_email()
返回的内容吗?这不是一个字符串。
嘿,从代码中删除您的电子邮件和密码。
然后修改密码
我做了 print_r,它返回标准对象类。
将其更改为result_array()
并再次执行print_r()
,然后将其转储到pastebin 或imgur(如果您不使用虚拟数据,您可以在paint 或其他内容中清除电子邮件) .我们只需要看看它是如何格式化的;几行数据就足够了。
【参考方案1】:
您可以尝试将 smtp 主机更改为 ssl://smtp.gmail.com
【讨论】:
如果我输入原始电子邮件,那么邮件就会被发送,所以我认为这不会有问题,但我仍然会尝试感谢您的输入。【参考方案2】:由于您似乎没有在 cmets 中得到它:$this->auth_model->ticket_email()
根据您的方案返回结果对象。你需要得到一个字符串(或数组),如下所示:
$this->email->to('one@example.com, two@example.com, three@example.com');
或
$this->email->to(
array('one@example.com', 'two@example.com', 'three@example.com')
);
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
并处理不相应的情况。
【讨论】:
是的,我做到了。它显示以下输出:- Array ( [0] => Array ( [email] => *****@gmail.com ) [1] => Array ( [email] => ****** *@example.com ) [2] => 数组 ( [email] => *******@gmail.com ) [3] => 数组 ( [email] => ******@gmail .com)) 嘿@alex 我更新了我的代码,你能检查一下是什么问题。以前我使用 foreach 发送邮件,但有一个问题是邮件只能发送给一名员工。 这是一个完全不同的问题,我无法在 cmets 中解决,但本质上您需要为 loclhost 配置电子邮件系统。在堆栈的其他地方有很多关于此的信息 我也不确定您是否注意到,但客户的电子邮件在您发布的图像中 昨天我为你投了赞成票,因为你解决了我的实际问题,而且我还删除了那些电子邮件。谢谢你,祝你有美好的一天或晚上。以上是关于当客户添加工单时,我想向在该部门工作的所有员工发送邮件的主要内容,如果未能解决你的问题,请参考以下文章