Как автоматически отправлять электронную почту на несколько пользователей в PHP по установленной дате и часу - PullRequest
0 голосов
/ 07 октября 2019

Я хочу отправлять электронную почту многопользовательской электронной почте в PHP автоматически, устанавливая дату пользователем. Я имею в виду, что пользователь выбирает дату и час из даты ввода, и я сохраняю их в базе данных, а затем хочу отправить электронное письмо на эту дату. date, есть ли какой-нибудь способ сделать эту работу автоматически, потому что я сам делаю эту работу вручную, и количество пользователей растет, и, возможно, мы должны отправлять электронные письма в любую секунду дня, и я хочу сделать эту работу в среде Laravel 5.8когда мне это удастся.

Код, который я использую в файле PHP и запускаю его вручную следующим образом:

(я получаю массив $UsersEmail из базы данных, выбирая дату и час иэто как массив, который я пишу в кодах).

$UsersEmail = array(
    0 => 'user1@example.com',
    1 => 'user2@site.com',
    2 => 'user3@test.com',
    3 => 'user4@somesite.com',
    4 => 'user5@anohtersite.com',
);

$AllEmail = '';

foreach($UsersEmail as $user){
    $AllEmail .= $user.', ';
}

$to = $AllEmail;

$subject = 'Send Email';

$message = 'This is text message';

$headers[] = 'MIME-Version: 1.0';
$headers[] = 'Content-type: text/html; charset=utf-8';

$headers[] = 'From: My site <info@mysite.com>';

mail($to, $subject, $message, implode("\r\n", $headers));

, и я хочу сделать эту работу в фреймворке Laravel5.8 в будущем

Моя версия PHP - 7.2.7 и версия LaravelЯ хочу использовать в будущем 5,8.

1 Ответ

0 голосов
/ 07 октября 2019

Вы можете запланировать команду, которая запускается, возможно, каждую минуту или один раз в час, которая проверяет, находятся ли какие-либо письма в подходящее время для отправки. В вашей таблице у вас будет флаг, который указывает, было ли отправлено письмо, чтобы не рассылать спам пользователю или какую-либо логику, которую вы хотите здесь. Получив пользователей, отправьте задание.

Команда SendUserMail

public function handle()
{
    $users = User::where('mail_sent', false)->whereDate('mail_send_date', '<=', Carbon::now())->get();
    ProcessUserMails::dispatch($users);
}

В Ядро необходимо зарегистрировать команду

protected function schedule(Schedule $schedule)
{
    $schedule->command('send-user-mail')->hourly();
}

Задание ProcessUserMails

public function handle()
{
    foreach ($this->users as $user) {
        $user->notify(new SendMailNotification($user));
        $user->update(['mail_sent', true);
    }
}

SendMailNotification

public function toMail($notifiable)
{
    return (new UserMail($this->user))->to($notifiable->email);
}

UserMail

public function build()
{
    return $this->subject('User Custom Email')
        ->markdown('emails.user.custom_mail');
}

Это может быть отправной точкой для вас. Однако обязательно проверьте документы Laravel о создании команд и уведомлений, поскольку я включил только фрагменты кода.

...