"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Tutorial Mailable do Laravel

Tutorial Mailable do Laravel

Publicado em 2024-11-08
Navegar:616

O envio de emails no Laravel requer a colaboração entre três componentes: Laravel mailer, classes mailable do Laravel e a fachada Mail. Cada um dos três trata de um aspecto diferente do ciclo de vida do envio de um e-mail.

Mailers são os drivers para conectar serviços de envio de e-mail (como AWS SES, Sendgrid, Mailgun, etc.) que o aplicativo pode usar para encaminhar e-mails aos destinatários.

Laravel Mailable são classes especiais que representam um modelo de email para enviar. Ele contém todas as informações típicas de uma mensagem de e-mail, como conteúdo, campo “para”, anexos, etc.

Finalmente, a fachada Mail é o ponto de acesso para solicitar o envio real de uma correspondência através de um driver de mala direta.

Tive a oportunidade de explorar esse sistema detalhadamente e agora no pico o Inspector envia mais de 6.000 emails por hora.

Laravel Mailable Tutorial

Espero que minha experiência possa ser útil para você entender melhor este componente do framework, já que o Laravel Mailable é um dos componentes-chave de qualquer aplicação moderna.

Para mais artigos técnicos você pode me seguir no Linkedin ou X.

Configurações de mailers do Laravel

A configuração dos drivers mailer no Laravel está no arquivo config/mail.php. É possível definir vários mailers, cada um caracterizado por um nome e um condutor de transporte.

'mailgun' => [
    'transport' => 'mailgun',
    // 'client' => [
    //     'timeout' => 5,
    // ]

O Laravel tentará usá-los caso o serviço de e-mail principal esteja inativo.

Crie uma classe que pode ser enviada por correio

Um mailable é uma classe PHP que representa um email enviado pela sua aplicação. Você pode criar uma nova classe que pode ser enviada por correio usando o comando Artisan make.

php artisan make:mail OrderConfirmation

A configuração de um mailable ocorre através de três métodos principais: envelope, conteúdo e anexos, que respectivamente tratam da definição dos cabeçalhos, do corpo da mensagem e de eventuais anexos.

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailables\Address;
use Illuminate\Mail\Mailables\Attachment;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class OrderConfirmation extends Mailable
{
    use Queueable;
    use SerializesModels;

    public function __construct(public Order $order) {}

    /**
     * Configure the email message
     */
    public function envelope()
    {
        return new Envelope(
            from: new Address('[email protected]', 'E-commerce'),
            subject: 'Order Confirmation',
        );
    }

    /**
     * Generate the body
     */
    public function content()
    {
        return new Content(
            markdown: 'emails.orders.confirm',
        );
    }

    /**
     * Configure the email attachements
     */
    public function attachments()
    {
        $code = $this->order->code;

        return [
            Attachment::fromPath("/path/to/order-{$code}.pdf"),
        ];
    }
}

A renderização do conteúdo do e-mail é, obviamente, confiada ao modelo Blade apropriado. Dentro da visualização Blade é possível recuperar os dados a serem usados ​​para renderizar o email usando as propriedades públicas definidas na classe mailable ($order no exemplo acima).

Code: {{ $order->code }}
Address: {{ $order->address }}
...

Enviando Laravel Mailable

O envio real de um e-mail ocorre através da fachada Mail e seus métodos to e send.

class OrderController extends Controller
{
    public function ship(Order $order)
    {
        // do stuff with the order

        // Send the confirmation email
        Mail::to($order->user)->send(new OrderConfirmation($order));
    }
}

O destinatário do e-mail pode ser passado como uma string de endereço de e-mail ou por meio de um objeto Usuário ou uma coleção de objetos que possuem o nome e as propriedades de e-mail.

O e-mail real a ser enviado é representado pelo objeto mailable, que recebe as propriedades necessárias para renderizar o template Blade associado ao conteúdo.

A fachada Mail oferece vários métodos encadeados que permitem definir com mais detalhes a configuração de envio, tanto no que diz respeito aos destinatários (com os métodos cc e bcc) quanto aos horários e métodos de envio (fila ou posterior).

Se você quiser aprender como criar suas próprias fachadas você pode ler o artigo abaixo:

https://inspector.dev/how-to-extend-laravel-with-driver-based-services/

Enfileirar um Laravel Mailable

Como o envio de um e-mail requer o uso de serviços externos (os drivers Mailer), pode ser uma operação lenta com impacto negativo na experiência do usuário.

O Laravel permite que você enfileire mensagens de e-mail para envio em segundo plano. Se você estiver interessado no tutorial sobre como usar o sistema de filas do Laravel em escala você pode ler o artigo abaixo:

https://inspector.dev/what-worked-for-me-using-laravel-queues-from-the-basics-to-horizon/

Para adiar o envio de um e-mail em segundo plano você tem duas opções: a interface ShouldQueue ou o método queue da fachada Mail.

Conforme mostrado em um trecho anterior, a classe mailable é gerada com algumas características anexadas por padrão, como Queueable.

Permite usar programaticamente os métodos de fila na fachada do Mail sem alterar sua implementação:

Mail::to($user)->queue(new OrderConfirmation($order));

Em alternativa você pode declarar a implementação da interface ShouldQueue na classe Mailable:

use Illuminate\Contracts\Queue\ShouldQueue;

class OrderConfirmation extends Mailable implements ShouldQueue
{
    ...
}

Se você usar esta interface, o envio do e-mail estará sempre na fila também se você chamar o método de envio padrão na fachada Mail.

// If the mailable class implements ShouldQueue these methods has the same behaviour.
Mail::to($user)->send(new OrderConfirmation($order));
Mail::to($user)->queue(new OrderConfirmation($order));

Renderizando o modelo mailable do Laravel no navegador

Quando você implementa uma visualização relacionada a uma mensagem de e-mail, é realmente útil ter feedback visual de qual será o resultado final que a visualização Blade renderizará. Você pode fazer isso usando o arquivo Routes/mailable.php em seus projetos Laravel.

/*
 * Render email in the browser.
 *
 * Visit https://homestead.test/mailable
 */
Route::get('/', function () {
    return new \App\Domains\Organization\Mails\IngestionLimitMail(
        \App\Domains\Organization\Models\Organization::firstOrFail()
    );
});

Você pode retornar uma instância Mailable válida da rota e o Laravel renderizará a visualização no navegador. É como desenvolver uma página web normal.

Laravel Mailable Tutorial

Por fim, lembre-se de limitar a disponibilidade desta rota no
RouteServiceProvider:

class RouteServiceProvider extends ServiceProvider
{
    /**
     * Define your route model bindings, pattern filters, etc.
     *
     * @return void
     */
    public function boot()
    {
        if (app()->environment('local')) {
            $this->mapMailableRoutes();
        }
    }

    /**
     * Render mailables in the browser.
     *
     * @return void
     */
    protected function mapMailableRoutes()
    {
        Route::prefix('mailable')
            ->group(base_path('routes/mailable.php'));
    }
}

Para mais artigos técnicos você pode me seguir no Linkedin ou X.

Monitore seu aplicativo Laravel gratuitamente

Inspector é uma ferramenta de monitoramento de execução de código projetada especificamente para desenvolvedores de software. Você não precisa instalar nada no nível do servidor, basta instalar o pacote Laravel e você está pronto para começar.

Se você está procurando monitoramento HTTP, insights de consulta de banco de dados e a capacidade de encaminhar alertas e notificações para seu ambiente de mensagens preferido, experimente o Inspector gratuitamente. Registre sua conta.

Ou saiba mais no site: https://inspector.dev

Laravel Mailable Tutorial

Declaração de lançamento Este artigo está reproduzido em: https://dev.to/inspector/laravel-mailable-tutorial-59o0?1 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3