如何在cakephp中一次发送多封电子邮件

Posted

技术标签:

【中文标题】如何在cakephp中一次发送多封电子邮件【英文标题】:How to send a multiple emails at a time in cakephp 【发布时间】:2011-09-06 21:46:07 【问题描述】:

我需要一次发送多封电子邮件,任何人都可以举个例子吗?或任何想法? 我需要一次向我的所有网站用户发送邮件(邮件内容对所有人都是一样的)

目前我在 for 循环中使用以下代码

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

【问题讨论】:

【参考方案1】:

我认为你有两种可能:

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-&gt;Email-&gt;reset() 很重要。

使用密件抄送

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 的链接调用此方法

有关更多信息,请务必阅读Email Component 上的手册。

【讨论】:

【参考方案2】:

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

【讨论】:

'->to()' 与电子邮件地址数组一起工作,但应该注意的是,电子邮件会将它们作为“to”字段中的地址列表发送 - 而不是作为单个电子邮件正如人们所期待的那样。考虑使用 '->bcc()' 以防万一您不想向您网站上的每个用户发送您网站上每个用户的电子邮件地址。 它的静态方式对电子邮件不是动态的。 @IndrajeetSingh 我给出了例子。如果是静态数组,你可以传递你的动态数组。这些都是非常基本的。正是你想要的?因为我直接使用 Cakephp LIST 查询从数据库中获取了数千名用户并将其传递给该 TO 参数。你正在做的方式是 foreach 所以这不是正确的方式。我根据我的工作经验告诉我。但是你投了我的票回答..哈哈哈【参考方案3】:

试试这个:

$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 你能解释一下标准方法吗? 不要使用 foreach.. 如果您有 100000 个用户,那么它的格式不正确。获取用户的电子邮件 ID 并传入 To 字段

以上是关于如何在cakephp中一次发送多封电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

如何一次发送多封电子邮件,每个电子邮件都带有一个 xlsx 文件附件?

使用 asp.net 发送 20,000 多封电子邮件

无法在多封电子邮件中重复使用电子邮件附件

电子邮件表单根据附件发送多封邮件

对多封电子邮件执行一次批处理脚本

如何使用 Codeigniter 通过 cc 发送多封电子邮件?