【问题标题】:Laravel sending separate, multiple mail without using foreach loopLaravel 在不使用 foreach 循环的情况下发送单独的多封邮件
【发布时间】:2015-01-07 23:18:35
【问题描述】:

我在 SwiftMailer 库下的 laravel 中使用 Mail 函数。

Mail::send('mail', array('key' => $todos1), function($message) {
        $message->to(array('TEST@example.com','TESsdT@example.com','TESjxfjT@example.com','TESfssdT@example.com'))->subject('Welcome!');
    });

上述功能向多个用户发送邮件,但用户知道所有邮件发送给谁,因为它的收件人地址包括

To: TEST@example.com, TESsdT@example.com, TESjxfjT@example.com, TESfssdT@example.com

所以为了纠正这个问题,我使用了一个 foreach 循环来单独发送邮件

    foreach($to as $receipt){
        //Mail::queue('mail', array('key' => $todos1), function($message) use ($receipt)
        Mail::send('mail', array('key' => $todos1), function($message) use ($receipt)
        {
            $message->to($receipt)->subject('Welcome!');
        });
    }   

上面的代码运行良好...

我的问题是,在这个高级框架中是否有任何功能可以向具有唯一to 地址的用户发送邮件(即)无需一个用户知道有多少其他人发送相同的邮件发送时不使用foreach...

【问题讨论】:

    标签: php email laravel laravel-4 swiftmailer


    【解决方案1】:

    您可以使用密件抄送(密件抄送):

    Mail::send('mail', array('key' => $todos1), function($message) {
        $message->to('firstemail@example.com')
        ->bcc(array('TEST@example.com','TESsdT@example.com','TESjxfjT@example.com','TESfssdT@example.com'))
        ->subject('Welcome!');
    });
    

    【讨论】:

    • 如果我需要使用与电子邮件中每个目的地相关联的变量,我必须使用foreach?
    • @JCarlos 是的,如果每封电子邮件都是唯一的,那么您将需要循环发送每封电子邮件。只有当您向所有人发送完全相同的电子邮件时,上述方法才有效
    【解决方案2】:

    您可以使用抄送或密件抄送将相同的 html 邮件发送给 N 人:

    $content = '<h1>Hi there!</h1><h2 style="color:red">Welcome to stackoverflow..</h2>';
         $bcc = ['*****@gmail.com','******@gmail.com'];
         $sub = "Sample mail";
          Mail::send([], [], function($message) use ($content, $sub, $bcc) {
            $message->from('ur-mail-id@gmail.com','name');
            $message->replyTo('no-reply@gmail.com', $name = 'no-reply');
            $message->to('******@domain.com', 'name')->subject($sub);
            $message->bcc($bcc, $name = null);
            // $message->attach('ch.pdf'); // if u need attachment
            $message->setBody($content, 'text/html');
          });
    

    【讨论】:

      【解决方案3】:

      SwiftMailer 的工作方式与您的普通电子邮件客户端(Outlook、Thunderbird...)类似。

      您所做的是唯一 100% 正确的操作,但您仍然可以按照史蒂夫的建议进行操作,使用密件抄送,但不要在收件人中使用 noreply 或其他不重要的电子邮件地址,因为所有收件人将看到该电子邮件地址。

      注意:单个函数调用不会使您的代码更快或更少占用资源。

      【讨论】:

      • 你是说使用foreach和单个函数会一样吗??
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-24
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多