3

我想使用codeigniter图书馆向我的时事通讯成员发送一封电子邮件,并且我想在电子邮件的内容中提及每个成员的电子邮件地址。为此,我曾经foreach loop一封一封地发送电子邮件。问题是代码只向我的时事通讯的一个成员(第一个成员)发送电子邮件。我检查了我的代码,它从数据库中获取成员并打印出所有成员。

这是我的模型:

function send_news()
{
    $subscribers = $this->get_subscriber_data();
    foreach($subscribers as $subscriber)
    {
        $this->load->helper('typography');

        //Format email content using an HTML file
        $data['news_Title'] = $this->input->post('news_Title');
        $HTML_Message = $this->load->view('admin/includes/newsletter_html_format', $data, true);

        $config['mailtype'] = 'html';
        $this->email->initialize($config);

        $this->email->from('newsletter@site.com', 'newsletter of site.com');
        $this->email->to($subscriber->subscriber_Email);
        $this->email->subject('newsletter of site.com');
        $this->email->message($HTML_Message);

        return $this->email->send();
    }

}

这就是我获取订阅者列表的方式:

function get_subscriber_data($options = array())
{
    $query = $this->db->get('mg_newsletter');

    if(isset($options['subscriber_Id']))
        return $query->row(0);

    return $query->result();
}

当我尝试回显时$subscriber->subscriber_Email,它会依次打印数据库中的所有电子邮件。但它不会向所有人发送电子邮件。我究竟做错了什么?!

4

3 回答 3

3

利用

 $this->email->clear()

正如 codeignitor 所说:将所有电子邮件变量初始化为空状态。如果您在循环中运行电子邮件发送功能,则可以使用此功能,允许在循环之间重置数据。

foreach ($list as $name => $address)
{
    $this->email->clear();

    $this->email->to($address);
    $this->email->from('your@example.com');
    $this->email->subject('Here is your info '.$name);
    $this->email->message('Hi '.$name.' Here is the info you requested.');
    $this->email->send();
}

如果您将该参数设置为 TRUE,则任何附件也将被清除。然后让我们知道

于 2013-11-02T08:31:21.283 回答
1

你在你的循环中“返回”,它退出了函数。

只需发送

于 2013-11-02T09:24:46.267 回答
0

您可以将加载帮助文件和电子邮件配置保留在循环之外,然后从 for 循环中删除 return,它将一一发送给所有订阅者,然后在循环完成后您可以执行 return 语句。

于 2017-08-25T19:08:37.637 回答