Laravel Mail :: send()发送到多个或bcc地址

haa*_*kym 52 php email laravel laravel-4

在使用Laravel的回调时,我似乎无法成功发送到多个地址Mail::send(),但是当我只指定一个收件人时,代码可以正常工作.

我试过链接:

// for example
$emails = array("myemail1@email.com", "myemail2@email.com");
$input = Input::all();

Mail::send('emails.admin-company', array('body' => Input::get('email_body')), 
function($message) use ($emails, $input) {
    $message
    ->from('admin@admin.org', 'Administrator')
    ->subject('Admin Subject');

        foreach ($emails as $email) {
            $message->to($email);
        }
});
Run Code Online (Sandbox Code Playgroud)

并传递一个数组:

// for example
$emails = array("myemail1@email.com", "myemail2@email.com");
$input = Input::all();

Mail::send('emails.admin-company', array('body' => Input::get('email_body')), 
    function($message) use ($emails, $input) {
        $message
        ->from('admin@admin.org', 'Administrator')
        ->subject('Admin Subject');

        $message->to($emails);
});
Run Code Online (Sandbox Code Playgroud)

但似乎没有工作,我在返回Mail :: failures()时收到失败消息,Mail :: failures()的var_dump()显示我尝试发送到的电子邮件地址,例如:

array(2) {
  [0]=>
  string(18) "myemail1@email.com"
  [1]=>
  string(18) "myemail2@email.com"
}
Run Code Online (Sandbox Code Playgroud)

显然做错了什么,会感谢任何帮助,因为我不理解API:http://laravel.com/api/4.2/Illuminate/Mail/Message.html#method_to

我意识到我可以把这个Mail::send()方法放在for/foreach循环和Mail::send()每个电子邮件地址中,但这对我来说似乎不是最佳解决方案,我希望->bcc()一旦一切正常,我也能够到所有地址收件人不会看到邮件发送给谁.

Mar*_*łek 94

我使用以下代码测试了它:

$emails = ['myoneemail@esomething.com', 'myother@esomething.com','myother2@esomething.com'];

Mail::send('emails.welcome', [], function($message) use ($emails)
{    
    $message->to($emails)->subject('This is test e-mail');    
});
var_dump( Mail:: failures());
exit;
Run Code Online (Sandbox Code Playgroud)

结果 - 失败的空数组.

但是当然你需要app/config/mail.php正确配置.因此,首先要确保您只能向一个用户发送电子邮件,然后与许多用户一起测试您的代码.

此外,使用这个简单的代码我的电子邮件都没有发送到免费邮件帐户,我只收到了我收费主机帐户收件箱的电子邮件,所以可能他们被一些过滤器捕获了(这可能是简单的主题/内容问题但是我提到它只是为了你没有收到一些电子邮件).

  • @haakym这就是为什么如果某些东西不起作用,你应该总是尝试使用最简单的代码,并确保它没有问题.问题往往不是你所期望的. (10认同)
  • 感谢您的回复。显然我没有做错任何事,但我的工作 IP 无法在我们的域之外转发电子邮件!一切都已排序并正在工作。再次感谢。 (2认同)

Abh*_*hek 20

如果您想同时向所有管理员发送电子邮件,您可以执行以下操作:

在.env文件中,将所有电子邮件添加为逗号分隔值:

ADMIN_EMAILS=admin1@site.com,admin2@site.com,admin3@site.com
Run Code Online (Sandbox Code Playgroud)

所以当你要发送电子邮件时,就这样做(是的!消息构建器实例的'to'方法接受一个数组):

所以,

$to = explode(',', env('ADMIN_EMAILS'));
Run Code Online (Sandbox Code Playgroud)

和...

$message->to($to);
Run Code Online (Sandbox Code Playgroud)

现在将邮件发送给所有管理员.

  • 您不应该直接引用ENV - 使用配置帮助程序. (9认同)
  • 使用 .env 文件的最佳答案 (2认同)

Tos*_*kan 12

接受的答案并没有任何再与laravel 5.3,因为可邮寄试图访问工作->email和结果

Mailable.php第376行中的ErrorException:尝试获取非对象的属性

laravel 5.3的工作代码是这样的:

$users_temp = explode(',', 'first@example.com,second@example.com');
    $users = [];
    foreach($users_temp as $key => $ut){
      $ua = [];
      $ua['email'] = $ut;
      $ua['name'] = 'test';
      $users[$key] = (object)$ua;
    }
 Mail::to($users)->send(new OrderAdminSendInvoice($o));
Run Code Online (Sandbox Code Playgroud)


plu*_*olt 7

使用Laravel 5.6,如果要传递多个带有名称的电子邮件,则需要传递关联数组的数组.将多个收件人推入$to阵列的示例:

$to[] = array('email' => $email, 'name' => $name);
Run Code Online (Sandbox Code Playgroud)

修复了两个收件人:

$to = [['email' => 'user.one@example.com', 'name' => 'User One'], 
       ['email' => 'user.two@example.com', 'name' => 'User Two']];
Run Code Online (Sandbox Code Playgroud)

'name'键不是必需的.您可以将其设置为'name' => NULL或不添加到关联数组,然后才会'email'使用.


Ada*_*ery 6

您可以像这样循环接收者:

foreach (['taylor@example.com', 'dries@example.com'] as $recipient) {
    Mail::to($recipient)->send(new OrderShipped($order));
}
Run Code Online (Sandbox Code Playgroud)

请参阅此处的文档


Dun*_*kun 5

如果您打算在一个实例中将一封电子邮件推送给不同的收件人(即抄送多个电子邮件地址),下面的解决方案适用于Laravel 5.4 及更高版本

Mail::to('dunsin.olubobokun@domain.com')
    ->cc(['paul.yomi@domain.com','stack.overflow@domain.com','abc.xyz@domain.com','nigeria@domain.com'])
    ->send(new document());
Run Code Online (Sandbox Code Playgroud)

其中document是进一步自定义您的电子邮件的任何类。