使用数据库中的数组数据向多个收件人发送电子邮件codeigniter

时间:2014-08-13 01:42:40

标签: php arrays codeigniter email

我尝试向多个收件人发送电子邮件。我将收件人输入到一个数组中,如下所示:

$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;
    }

谢谢...

2 个答案:

答案 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'索引枚举的数组数组。 (很像提供的链接中的'水果'示例)。