0

我不明白如何为所有用户发送一封电子邮件,我在我的控制器中这样做:

// 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();

但是我有错误“没有有效的邮件”,并且在用户邮件列表之后

我的代码有什么问题?

4

3 回答 3

1

我一眼就注意到了几件事……

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

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

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

--edit-- 好点 Deepak,Cake 的文档建议你给 BCC 一个数组。这样做更容易、更高效。

其次,$CakeEmail->bcc("$bcc");不需要引号。它应该可以很好地使用它们,但是我已经看到 Cake 做了一些非常奇怪的事情......试着把它们拿出来:

$CakeEmail->bcc($bcc);

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

$CakeEmail->to('noreply@yourdomain.com');
于 2013-10-09T02:18:57.387 回答
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'].'')
));
于 2013-10-09T11:39:44.623 回答
0

尝试将您的 $bcc 块更改为:

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

另请参阅CakeEmail 文档

于 2013-10-09T02:18:40.603 回答