我不明白如何为所有用户发送一封电子邮件,我在我的控制器中执行此操作:
// 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();
但我收到错误“无效邮件”,并且在收听用户邮件后
我的代码有什么问题?
答案 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