Laravel не будет отправлять электронную почту на несколько получателей - PullRequest
2 голосов
/ 06 января 2020

Я пытаюсь отправить несколько электронных писем, но они возвращают такие ошибки:

Ожидаемый код ответа 354, но получил код "550" с сообщением "550 5.7.0 Запрошенное действие не выполнено: слишком много писем в секунду "

Код

$reciverss = array_merge($admins, $workers); // finalizing my queries and joining two arrays in one

// getting input data
$details = array(
  'body' => $request->input('body'),
  'subject' => $request->input('subject'),
);

// getting receivers email addresses from my merged array and try to send input data to them as email
foreach($reciverss as $receive){
  Mail::to($receive->email)->send(new PICMAIL($details));
}

Подробнее

Вот как выглядят мои данные $rereciverss:

[{email: "admin@admin.com", username: "admin", userId: 1},…]
  0: {email: "admin@admin.com", username: "admin", userId: 1}
  1: {email: "employee@employee.com", username: "employee", userId: 2}
  2: {email: "non-employee@employee.com", username: "non employee", userId: 3}

В основном мне нужно получать электронные письма, чтобы отправлять им электронные письма, но они возвращают ошибку, о которой я упоминал выше.

Есть идеи?

Ответы [ 3 ]

3 голосов
/ 06 января 2020

В соответствии с вашей ошибкой написано

слишком много писем в секунду

вы можете добавить задержку в письмах и попробовать еще раз или использовать Регулирование работы чтобы справиться с этим делом. взгляните на функцию sleep ()

foreach($reciverss as $receive){
  sleep(30);
  Mail::to($receive->email)->send(new PICMAIL($details));
}
1 голос
/ 06 января 2020

использовать очередь - лучшее решение здесь и отправить его.

foreach($reciverss as $receive){

  MailQueueClass::dispatch(with_your_data);

}
<?php

namespace App\Jobs\Email;

use App\Mail\InvoiceCreated;
use App\Models\Order\Order;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Mail;

class SendInvoice implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    private your_variable;

    /**
     * Create a new job instance.
     *
     * @param $order_id
     */
    public function __construct($your_variable1,$your_variable2)
    {
        $this->your_variable1 = $your_variable1;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
       Mail::to($your_variable1)->send(new PICMAIL($your_variable2));
    }
}

для деталей https://laravel.com/docs/5.8/queues

0 голосов
/ 06 января 2020

Пожалуйста, попробуйте это.

#emails=[];
foreach($reciverss as $receive){
  sleep(30);
  $emails[]=$receive->email;
}
if(count($emails)){
  Mail::to($emails)->send(new PICMAIL($details));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...