web-dev-qa-db-ja.com

Laravel Mail :: send()は複数のtoまたはbccアドレスに送信します

LaravelのMail::send()コールバックを使用すると、multipleアドレスに正常に送信できないようですが、one受信者。

私は連鎖を試みました:

// for example
$emails = array("[email protected]", "[email protected]");
$input = Input::all();

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

        foreach ($emails as $email) {
            $message->to($email);
        }
});

配列を渡す:

// for example
$emails = array("[email protected]", "[email protected]");
$input = Input::all();

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

        $message->to($emails);
});

しかし、どちらも動作していないようで、Mail :: failures()を返すときに失敗メッセージが表示されます。Mail:: failures()のvar_dump()には、送信しようとしたメールアドレスが表示されます。

array(2) {
  [0]=>
  string(18) "[email protected]"
  [1]=>
  string(18) "[email protected]"
}

APIを理解していないので、明らかに何か間違ったことをしていると、助けに感謝します: http://laravel.com/api/4.2/Illuminate/Mail/Message.html#method_to

Mail::send()メソッドをfor/foreachループに、Mail::send()を各メールアドレスに配置できることを理解していますが、これは最適なソリューションではないようです。すべてが機能したら、すべてのアドレスに->bcc()できるため、受信者はメールの送信先が他に誰にもわからないようになります。

51
haakym

次のコードを使用してテストしました。

$emails = ['[email protected]', '[email protected]','[email protected]'];

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

結果-失敗の場合は空の配列。

ただし、当然、app/config/mail.phpを適切に構成する必要があります。そのため、最初に1人のユーザーだけに電子メールを送信できることを確認してから、多くのユーザーでコードをテストしてください。

さらに、このシンプルなコードを使用すると、無料のメールアカウントにメールが配信されず、有料のホスティングアカウントにある受信トレイにメールが届くだけだったため、おそらくいくつかのフィルターでキャッチされました(おそらく簡単なトピック/コンテンツの問題ですが、いくつかの電子メールを受信して​​いない場合に備えて言及しました)。

91

すべての管理者に同時にメールを送信する場合は、次のようなことができます。

.envファイルに、すべての電子メールをコンマ区切り値として追加します。

[email protected],[email protected],[email protected]

したがって、メールを送信するときは、これを行うだけです(はい!メッセージビルダーインスタンスの 'to'メソッドは配列を受け入れます)。

そう、

$to = explode(',', env('ADMIN_EMAILS'));

そして...

$message->to($to);

これで、すべての管理者にメールが送信されます。

17
Abhishek

Laravel 5.6を使用して、名前付きの複数の電子メールを渡す場合は、連想配列の配列を渡す必要があります。複数の受信者を$to配列にプッシュする例:

$to[] = array('email' => $email, 'name' => $name);

2人の受信者を修正しました:

$to = [['email' => '[email protected]', 'name' => 'User One'], 
       ['email' => '[email protected]', 'name' => 'User Two']];

「名前」キーは必須ではありません。 'name' => NULLに設定するか、連想配列に追加しないで、'email'のみを使用できます。

6
plus5volt

Laravel 5.6とNotifications Facadeを使用しています。

Eメールをコンマで区切って変数を設定して送信しようとすると、「指定されたメールのアドレスはRFC 2822、3.6.2に準拠していません」というエラーが表示されます。

そこで、問題を解決するために、@ Toskanから次のコードを作成して解決策のアイデアを得ました。

        // Get data from Database
        $contacts = Contacts::select('email')
            ->get();

        // Create an array element
        $contactList = [];
        $i=0;

        // Fill the array element
        foreach($contacts as $contact){
            $contactList[$i] = $contact->email;
            $i++;
        }

        .
        .
        .

        \Mail::send('emails.template', ['templateTitle'=>$templateTitle, 'templateMessage'=>$templateMessage, 'templateSalutation'=>$templateSalutation, 'templateCopyright'=>$templateCopyright], function($message) use($emailReply, $nameReply, $contactList) {
                $message->from('[email protected]', 'Some Company Name')
                        ->replyTo($emailReply, $nameReply)
                        ->bcc($contactList, 'Contact List')
                        ->subject("Subject title");
            });

1人または複数の受信者に送信するのに役立ちました。 ????

0

これはうまく機能します-私はリクエストオブジェクトと電子メール配列にアクセスできます

        $emails = ['[email protected]', '[email protected]'];
        Mail::send('emails.lead', ['name' => $name, 'email' => $email, 'phone' => $phone], function ($message) use ($request, $emails)
        {
            $message->from('[email protected]', 'Joe Smoe');
//            $message->to( $request->input('email') );
            $message->to( $emails);
            //Add a subject
            $message->subject("New Email From Your site");
        });
0
Radmation

以下のソリューションでは、単一のメールを複数のアドレスに同時に送信できます。 Laravel 5.4以降で正常に動作します。 たとえば、、次のメールアドレスが希望する受信者の場合、たとえば:'[email protected] '、' paul.yomi @ domain.com '、' [email protected] '、' [email protected] '、' [email protected] '

Mail::to('[email protected]')
    ->cc(['[email protected]','[email protected]','[email protected]','[email protected]'])
    ->send(new document());

documentは、メールをさらにカスタマイズするクラスです。

0