Как отправить электронную почту всем пользователям с помощью 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(); 

Но у меня ошибка «нет действительной почты», а после списка почты пользователя

что не так в моем коде?

Несколько вещей, которые я заметил, быстро взглянул …

 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'); 

Попробуйте изменить свой блок $ bcc на это:

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

Также обратитесь к документации CakeEmail

Я просто использую функцию addBcc CakeEmail и изменяю цикл:

 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'].'') ));