如何使用cakephp为所有用户发送电子邮件

时间:2013-10-09 02:03:25

标签: php cakephp

我不明白如何为所有用户发送一封电子邮件,我在我的控制器中执行此操作:

// Init
$data = $this->request->data['Email'];
$d = array(
    'subject' => $data['subject'],
    'message' => $data['message']
);

// QUERY
$all = $this->Spoutnik->find('all', array(
    'conditions' => array(
        'Spoutnik.role >=' => '1'
    ),
    'fields' => array('Spoutnik.email')
));
$this->set(compact('all'));

// list
$bcc = '';
foreach ($all as $user) {
    $bcc .= $user['Spoutnik']['email'].',';
}

// MAIL
App::uses('CakeEmail', 'Network/Email');
$CakeEmail = new CakeEmail('default');

$website_short_name = Configure::read('website.short_name');
$CakeEmail->bcc("$bcc");
$CakeEmail->subject(''.$website_short_name.' :: '.$d['subject'].'');

$CakeEmail->viewVars(array(
    'message' => (''.$d['message'].'')
));

$CakeEmail->emailFormat('html');
$CakeEmail->template('message_direct');

// final
$CakeEmail->send();

但我收到错误“无效邮件”,并且在收听用户邮件后

我的代码有什么问题?

3 个答案:

答案 0 :(得分:1)

我很快就注意到了一些事情......

foreach ($all as $user) {
    $bcc .= $user['Spoutnik']['email'].',';
}

在该代码中,您在每封电子邮件后添加逗号,因此在您的字符串末尾您将有一个逗号。试试这个:

$e = 0;
foreach ($all as $user) {
    if($e > 0) $bcc .= ',';
    $bcc .= $user['Spoutnik']['email'];
    $e++;
}

- 编辑 - 好点Deepak,Cake的文档建议你给BCC一个数组。这样做更容易,更有效率。

其次,$CakeEmail->bcc("$bcc");不需要引号。 应该与他们合作,但我看到Cake做了一些非常奇怪的事情......尝试把它们拿出来:

$CakeEmail->bcc($bcc);

第三,您将所有这些电子邮件设置为BCC,这很好,但我看不到地址。如果您想要发送到很多电子邮件地址而他们没有看到对方,您仍然需要将电子邮件发送到某个地方,即使它是noreply@yourdomain.com。在发送之前添加到地址:

$CakeEmail->to('noreply@yourdomain.com');

答案 1 :(得分:1)

我将使用CakeEmail的addBcc函数并修改循环:

App::uses('CakeEmail', 'Network/Email');
$CakeEmail = new CakeEmail('default');

// list
foreach ($all as $user) {
    $CakeEmail->addBcc($user['Spoutnik']['email']);
}

$website_short_name = Configure::read('website.short_name');
$CakeEmail->subject(''.$website_short_name.' :: '.$d['subject'].'');

$CakeEmail->viewVars(array(
    'message' => (''.$d['message'].'')
));

答案 2 :(得分:0)

尝试将$ bcc块更改为:

// list
$bcc = array();
foreach ($all as $user) {
    $bcc[]= $user['Spoutnik']['email'];
}

另请参阅CakeEmail Documentation