Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

destrutorx's avatar

Send EMAILS at determined DATE and TIME (help with logic)

Hello.

In my app I have a form which allow the user to choose/insert: date/time, list of emails and text/subject of message. This is used to send emails.

The text/subject is inserted in the table CONVITE (cod_convite, subject, body).

The email and date/time are inserted in the table FILA (cod_fila, email, date, cod_convite).

Crons that run every minute are configured in the server.

I have this command to handle the table FILA. The emails are send using MANDRILL.

use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;

class FilaCommand extends Command {

    protected $name = 'fila:disparar'; 
    protected $description = 'Something here.'; 

    public function fire() {

                // Looking for messages that should be send
        $agendados = Fila::where('date', '>=', 'CURDATE()')
                      ->orderBy('cod_fila', 'asc')
                      ->get();

        foreach ($agendados as $a) {

            $convite = Convite::where('cod_convite', '=', $a['cod_convite'])->first();

                        // Send
            Mail::send('emails.sample', array($convite['body']), function($message) {
            
                $message->from('sistema@teste.com', 'Test System');
                $message->to($a['email']);
                $message->subject($convite['subject']);

            });

            // Delete
            $fila_item = Fila::find($a['cod_fila']);
            $fila_item->delete();

        }

    }

}

About my code, I have the following questions:

Can this be done faster? Can my tables be improved?

Should I limit the emails sent for call, grouping them, or this is desnecessary?

Should I use mail:send or mail:queue?

How can I track the number of emails already sent to show in a page in the app?

How can I cancel a send?

Its possible to get and store in the database the result of 'mandrill send'?

0 likes
0 replies

Please or to participate in this conversation.