如何在CakePHP中同时发送多封电子邮件

5
我需要一次性发送多封电子邮件,有人有示例或任何想法吗? 我需要同时向所有站点用户发送邮件(所有邮件内容相同)。
目前我在循环中使用以下代码。
        $this->Email->from     = '<no-reply@noreply.com>';
        $this->Email->to       =  $email;
        $this->Email->subject  =   $subject ;
        $this->Email->sendAs   = 'html'; 
3个回答

12
我认为你有两种可能性: foreach 假设您在UsersController中有一个名为mail_users的函数。
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
在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);

2
'->to()'与电子邮件地址数组的配合使用是有效的,但需要注意的是电子邮件将作为地址列表发送到“收件人”字段,而不是单独的电子邮件,这可能会让人感到意外。如果您不想向您网站上的每个用户发送其他用户的电子邮件地址,请考虑使用“->bcc()”。 - Strixy
这是一种静态的方式,而不是动态地发送电子邮件。 - Indrajeet Singh
@IndrajeetSingh 我给了一个例子..如果是静态数组,你可以传递你的动态数组..这些都是非常基础的。你确切想要什么?因为我直接使用Cakephp LIST查询从数据库中获取了成千上万的用户,并将其传递给TO参数..你现在使用的是foreach,所以这不是正确的方法..根据我的工作经验,我告诉你这个方法..但是你还是给了我反对票..哈哈哈 - AnNaMaLaI

0

试试这个:

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

这不是标准的方式...使用foreach。 - AnNaMaLaI
1
你能解释一下标准的方式吗? - Indrajeet Singh
不要使用foreach。如果您有100000个用户,则不是正确的格式。取用户的电子邮件ID并在To字段中传递。 - AnNaMaLaI

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接