如何在不使用sendgrid的情况下用cakephp发送群发邮件

如何在不使用sendgrid的情况下用cakephp发送群发邮件,php,email,cakephp,massmail,Php,Email,Cakephp,Massmail,这是我的html模板 Dear ##name##(##email##), Thank you for contacting us. 我想将########和####email##替换为将在数组中提供的接收人的姓名和电子邮件。我该怎么做 这就是我到目前为止得到的 $to_email = array('a@example.com', 'b@example.com', 'c@example.com'); $to_name = array('apple', 'ball', 'cat'); $Ema

这是我的html模板

Dear ##name##(##email##),

Thank you for contacting us.
我想将########和####email##替换为将在数组中提供的接收人的姓名和电子邮件。我该怎么做

这就是我到目前为止得到的

$to_email = array('a@example.com', 'b@example.com', 'c@example.com');
$to_name = array('apple', 'ball', 'cat');

$Email = new CakeEmail();
$Email->from($from);
$Email->to($to_email );
$Email->subject($subject);
$Email->emailFormat('html');
$Email->viewVars(array('data' => $body));
$Email->template('bulk');
$Email->send();

您应该首先为您的电子邮件创建,其中将包括您当前的内容(我在下面的示例中使用name
example\u template.ctp
):

还需要更改发送电子邮件的方式,以循环发送电子邮件,而不是在一个字段中发送所有收件人。因此,请将您的输入数组合并为一个,例如:

$emails = array(
    'a@example.com' => 'apple',
    'b@example.com' => 'ball',
    'c@example.com' => 'cat'
);
然后,只需通过阵列进行访问并发送邮件:

$Email = new CakeEmail();

foreach ($emails as $email => $name) {
    $Email->from($from);
    $Email->to($email);
    $Email->subject($subject);
    $Email->emailFormat('html');
    $Email->viewVars(array('email' => $email, 'name' => $name));
    $Email->template('example_template');
    $Email->send();
    $Email->reset(); // for cleaning up CakeEmail object
}

如果不使用像sendgrid这样的循环,就不能实现这一点吗?因为使用循环,如果我们同时发送数千封电子邮件,那么系统将挂起。感谢您的回答,但我正在寻找其他解决方案。您是否直接从controller action发送此邮件?您可能应该将此功能移动到Shell并创建cronjob,这样整个发送邮件的操作都将在后台完成。我不习惯使用此Shell。你能给我举个例子吗?从这个开始。您需要将电子邮件发送逻辑移动到shell。若您从数据库检索电子邮件,也可以轻松地将此代码移动到那个里。如果完成创建,则只需在控制台命令中键入即可发送邮件。/console/cake mailing send(如果您的shell具有名称MailingShell和方法send())。您肯定应该在后台(通过cli)发送电子邮件-通过web,您通常只需创建作业供后台工作人员处理。
这是我的html模板
它应该看起来像任何其他视图文件-从这个基础开始,您就有机会工作。是的,我知道,但是我希望能够用接收者的名字替换模板中的一些变量,或者可以直接替换echo接收者的名字,而不使用循环。从逻辑上讲,您要求发送3封电子邮件(因为内容不同)。如果没有…,您无法发送3封内容不同的电子邮件。。。。发送3封电子邮件。
$emails = array(
    'a@example.com' => 'apple',
    'b@example.com' => 'ball',
    'c@example.com' => 'cat'
);
$Email = new CakeEmail();

foreach ($emails as $email => $name) {
    $Email->from($from);
    $Email->to($email);
    $Email->subject($subject);
    $Email->emailFormat('html');
    $Email->viewVars(array('email' => $email, 'name' => $name));
    $Email->template('example_template');
    $Email->send();
    $Email->reset(); // for cleaning up CakeEmail object
}