Как отправить несколько электронных писем одновременно в cakephp - PullRequest
4 голосов
/ 02 июня 2011

Мне нужно отправлять несколько электронных писем одновременно, может у кого-нибудь есть пример? или есть идеи? Мне нужно отправлять почту всем пользователям моего сайта одновременно (содержимое почты одинаково для всех)

В настоящее время я использую следующий код в цикле for

        $this->Email->from     = '<no-reply@noreply.com>';
        $this->Email->to       =  $email;
        $this->Email->subject  =   $subject ;
        $this->Email->sendAs   = 'html'; 

Ответы [ 3 ]

12 голосов
/ 02 июня 2011

Я думаю, у вас есть 2 возможности:

Еогеасп

Предположим, у вас есть функция mail_users в вашем UsersController

function mail_users($subject = 'Sample subject') {
    $users = $this->User->find('all', array('fields' => array('email'));
    foreach ($users as $user) {
        $this->Email->reset();
        $this->Email->from     = '<no-reply@noreply.com>';
        $this->Email->to       =  $user['email'];
        $this->Email->subject  =  $subject ;
        $this->Email->sendAs   = 'html';
        $this->Email->send('Your message body');
    }
}

В этой функции $this->Email->reset() важен.

с использованием BCC

function mail_users($subject = 'Sample subject') {
    $users = $this->User->find('all', array('fields' => array('email'));
    $bcc = '';
    foreach ($users as $user) {
        $bcc .= $user['email'].',';
    }
    $this->Email->from     = '<no-reply@noreply.com>';
    $this->Email->bcc      = $bcc;
    $this->Email->subject  = $subject;
    $this->Email->sendAs   = 'html';
    $this->Email->send('Your message body');
}

Теперь вы можете просто вызвать этот метод со ссылкой на /users/mail_users/subject

Для получения дополнительной информации обязательно прочитайте руководство по Компонент электронной почты .

4 голосов
/ 08 июня 2012

В Cakephp 2.0 я использовал следующий код:

$result = $email->template($template, 'default')
    ->emailFormat('html')
    ->to(array('first@gmail.com', 'second@gmail.com', 'third@gmail.com')))
    ->from($from_email)
    ->subject($subject)
    ->viewVars($data);
1 голос
/ 06 июня 2014

Попробуйте это:

$tests = array();
foreach($users as $user) {
    $tests[] = $user['User']['email'];
}

$mail = new CakeEmail();
$mail->to($tests) 
    ->from('<no-reply@noreply.com>')
    ->subject('ALERT')
    ->emailFormat('html')
    ->send('Your message here');
...