我尝试向多个收件人发送电子邮件。我将收件人输入到一个数组中,如下所示:
$recipients = array(
'email1@host.com',
'email2@host.com',
'email3@host.com'
);
它很好用。
现在我需要获取电子邮件地址表单数据库,当我运行它时,它显示错误:
遇到PHP错误
严重性:警告
消息:preg_match()期望参数2为字符串,给定数组
文件名:libraries / Email.php
行号:795
我试图从数据库中看到数组,它看起来像这样:
Array ( [0] => Array ( [email] => vikki2@afteroffice.com ) [1] => Array ( [email] => nanapuspita05@hotmail.com ) )
以下是发送电子邮件的功能:
function send_bulk_mail() {
$from = 'email@email.com';
$to = 'email1@email.com';
$search_by = $this->input->post('search_by');
$search_field = $this->input->post('search_field');
$recipients = $this->company_model->get_email($search_by, $search_field);;
$subject = $this->input->post('subject');
$message = $this->input->post('message');
$this->load->library('email');
$this->email->from($from);
$this->email->to($to);
$this->email->bcc($recipients);
$this->email->subject($subject);
$this->email->message($message);
$this->email->send();
redirect(base_url('index.php/company'));
}
有没有更改阵列的解决方案?或者更改libraries/email.php
这是libraries / email.php中的函数:
public function clean_email($email)
{
if ( ! is_array($email))
{
if (preg_match('/\<(.*)\>/', $email, $match))
{
return $match['1'];
}
else
{
return $email;
}
}
$clean_email = array();
foreach ($email as $addy)
{
if (preg_match( '/\<(.*)\>/', $addy, $match))
{
$clean_email[] = $match['1'];
}
else
{
$clean_email[] = $addy;
}
}
return $clean_email;
}
谢谢...
答案 0 :(得分:1)
您从数据库中重新获取的 $ recipients 是一个数组,其中每个元素都是数组,而您在下面描述的 $ recipients 是每个元素的数组是字符串。尝试创建一个数组时,每个元素都是一个字符串,当您从DB中检索时,如下所示:
$recipient_array = $this->company_model->get_email($search_by, $search_field);
$recipients = array();
foreach($recipient_array as $key => $value) {
$recipients[] = $value['email'];
}
答案 1 :(得分:0)
preg_match需要两个字符串然后一个数组。 (http://php.net/manual/en/function.preg-match.php)。该错误似乎表明它没有将格式正确的数组作为第二个参数。
基于数组(http://php.net/manual/en/function.array.php)的正确格式与数组输出相比,您似乎在为它提供一个使用'email'索引枚举的数组数组。 (很像提供的链接中的'水果'示例)。