Site

Disparando Emails

Após criar sua classe Mail, você poderá enviar emails utilizando o sistema Mailer do MUCRM.

O envio pode ser feito:

  • Diretamente
  • Através de Jobs
  • Em segundo plano utilizando Workers

Importando o Mailer

use MUCRM\engine\mail\Mailer;

Envio Simples

use MUCRM\engine\mail\mailer;
use MUCRM\shared\mailers\recovery_mail;

mailer::send(
    'cliente@email.com',
    new recovery_mail('Maria', 'cliente@email.com', 'abc123')
);

O primeiro parâmetro representa o destinatário. O segundo parâmetro recebe a classe Mail.


Exemplo Completo

<?php

namespace App\Controllers;

use MUCRM\engine\mail\Mailer;
use MUCRM\shared\mailers\recovery_mail;

class AuthController
{
    public function recovery()
    {
        mailer::send(
            'admin@site.com',
            new recovery_mail(
                'Administrador',
                'admin',
                '123456'
            )
        );
    }
}

Enviando Emails em Segundo Plano

O recomendado é utilizar Jobs para evitar lentidão na aplicação:

SendRecoveryEmail::dispatch([
    'email' => 'admin@site.com',
    'name' => 'Administrador',
    'login' => 'admin',
    'password' => '123456'
]);

Exemplo da Job

<?php

namespace MUCRM\shared\jobs;

use MUCRM\engine\queue\job;
use MUCRM\engine\mail\Mailer;
use MUCRM\shared\mailers\recovery_mail;

class SendRecoveryEmail extends Job
{
    public function handle(): void
    {
        mailer::send(
            $this->data['email'],

            new recovery_mail(
                $this->data['name'],
                $this->data['login'],
                $this->data['password']
            )
        );
    }
}

Processando os Emails

php mucrm jobs:run

Utilizando Delay

Você também pode atrasar o envio do email:

SendRecoveryEmail::dispatch([
    'email' => 'admin@site.com'
], 60);

Neste exemplo: 60 segundos.


Enviando para Múltiplos Destinatários

mailer::send(
    'contato@site.com',
    new ContactMail()
);

mailer::send(
    'financeiro@site.com',
    new ContactMail()
);

Tratando Erros

Você pode utilizar try/catch:

try {

    mailer::send(
        'admin@site.com',
        new recovery_mail()
    );

} catch (\Throwable $e) {

    echo $e->getMessage();
}

Logs

Os erros podem ser registrados utilizando:

use MUCRM\engine\support\log;

log::error($e);

Recomendação

💡Em produção, sempre utilize
Queue, Workers, Retry automático e Failed Jobs. Isso evita perda de emails e melhora a performance da aplicação.

Fluxo Recomendado

Controller
    ↓
Dispatch Job
    ↓
Queue
    ↓
Worker
    ↓
Mailer
    ↓
Email enviado