2013-10-09 47 views
0

我不知道如何为所有用户发送一封电子邮件,我做这在我的控制器:如何发送电子邮件的所有用户使用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(); 

但我有错误“没有有效的邮件”,并在收听用户的邮件后

我的代码有什么问题?

+0

选中此http://stackoverflow.com/questions/6211992/ how-to-send-a-multiple-emails-at-a-time-in-cakephp – AnNaMaLaI

+0

谢谢,但我把这个问题的原始代码解决方案,它不工作。 – UbuntuClash

回答

0

试着改变你的$ BCC块这样的:

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

另请参阅CakeEmailDocumentation

1

夫妇的事情我已经在看一眼注意到...

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

在那段代码中,你在每封电子邮件后都加上一个逗号,所以在你的字符串末尾会有一个逗号。试试这个:

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

- 编辑 - 好一点迪帕克,蛋糕的文档建议你给BCC的数组。制作这样做更简单,更高效。

二,$CakeEmail->bcc("$bcc");不需要引号。它应该与他们的工作很好,但我已经看到了蛋糕做一些非常奇怪的事情......尝试采取出来:

$CakeEmail->bcc($bcc); 

第三,你将所有的电子邮件,BCC这是很好的,但我看不到地址。如果你想发送到很多电子邮件地址而他们没有看到对方,你仍然需要发送电子邮件到某个地方,即使它的[email protected]。添加解决您发送之前:

$CakeEmail->to('[email protected]'); 
+0

感谢恭维和+1的'to'部分! – Deepak

+0

这些解决方案的工作,仍然是相同的错误:( – UbuntuClash

0

我将只使用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'].'') 
)); 
+0

不工作:(我把一个调试: 'code' \t [保护] _bcc =>数组( \t \t '[email protected]'=> '[email protected]', \t \t '[email protected]'=> '[email protected]', \t \t '[email protected]'=> '[email protected]' \t) 'code' – UbuntuClash

+0

如果你正在使用一个数组作为addBcc,那么这个键必须是电子邮件,值是这个人的名字,但是用我的例子,你可以使用一个字符串addBcc('string')或一个ddBcc(array('email'=>'name')) –

+0

仍然不能工作,$ CakeEmail-> to也不会发送 – UbuntuClash

相关问题