Como enviar e-mail com Laravel 10 e IAgente


Neste tutorial, será apresentado como enviar e-mails com Laravel 10 e IAgente.

Primeiramente, será demonstrado como criar o layout do e-mail.

Em seguida, será explicado como enviar e-mails com Laravel 10.

Por fim, será mostrado como enviar e-mails gratuitos com IAgente utilizando SMTP.


Download do código fonte desenvolvido na aula: Download

Enviar e-mail gratuito via SMTP: Acessar

Curso de Laravel: Mais Detalhes do Curso

Playlist completa sobre Laravel: Acessar

Receber as aulas gratuitas do curso de Laravel: Acessar


Para começar, é utilizado como base o projeto da aula "Como criar exclusão lógica do registro do banco de dados com Laravel 10".

Criada a rota para enviar e-mail "routes/web.php".

Route::get('/send-email-pendente-conta', [SendEmailContaController::class, 'sendEmailPendenteConta'])->name('conta.send-email-pendente');

Na controller "app/Http/Controllers/SendEmailContaController.php", foi criado o método "sendEmailPendenteConta". No mesmo, são recuperadas as contas com a data de vencimento na data atual e enviados os dados das contas para a classe "SendMailContaPagar", responsável por enviar o e-mail.

<?php

namespace App\Http\Controllers;

use App\Mail\SendMailContaPagar;
use App\Models\Conta;
use Carbon\Carbon;
use Exception;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Mail;

class SendEmailContaController extends Controller
{

    // Enviar e-mail contas pendentes
    public function sendEmailPendenteConta()
    {
        try{

            // Obter a data atual
            $dataAtual = Carbon::now()->toDateString();

            // Recuperar as contas do banco de dados
            $contas = Conta::whereDate('vencimento', $dataAtual)
                ->with('situacaoConta')
                ->get();

                // dd($contas);

            // Enviar os dados para enviar e-mail
            Mail::to(env('MAIL_TO'))->send( new SendMailContaPagar($contas));

            // Redirecionar de volta à página anterior
            return back()->with('success', 'E-mail enviado com sucesso!');

        }catch (Exception $e){

            // Salvar log
            Log::warning('E-mail não enviado.', ['error' => $e->getMessage()]);

            // Redirecionar o usuário, enviar a mensagem de erro
            return back()->with('error', 'E-mail não enviado!');
        }
    }
}

Criada a classe responsável por enviar e-mails "SendEmailContaPagar".

php artisan make:mail SendEmailContaPagar

Na classe criada anteriormente, ou seja, no arquivo "app/Mail/SendEmailContaPagar", foi implementado para receber os dados das contas ao carregar a classe, alterado o título do e-mail e indicado o carregamento do layout do e-mail em formato HTML e texto.

<?php

namespace App\Mail;

use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;

class SendMailContaPagar extends Mailable
{
    use Queueable, SerializesModels;

    /**
     * Create a new message instance.
     */
    public function __construct(public $contas)
    {
        //
    }

    /**
     * Get the message envelope.
     */
    public function envelope(): Envelope
    {
        // Obter a data atual
        $dataAtual = Carbon::now()->format('d/m/Y');

        // Criar o título do e-mail
        return new Envelope(
            subject: 'Conta do dia ' . $dataAtual,
        );
    }

    /**
     * Get the message content definition.
     */
    public function content(): Content
    {
        // Carregar o layout do e-mail HTML e texto
        return new Content(
            view: 'emails.sendEmailContaPagar',
            text: 'emails.sendEmailTextContaPagar',
        );
    }

    /**
     * Get the attachments for the message.
     *
     * @return array<int, \Illuminate\Mail\Mailables\Attachment>
     */
    public function attachments(): array
    {
        return [];
    }
}

Criado o layout do e-mail em formato HTML no arquivo "resources/views/emails/sendEmailContaPagar.blade.php".

@extends('layouts.email')

@section('content')
    <p>Olá, </p>

    <p>Contas a pagar: </p>

    @foreach ($contas as $conta)
        - <strong><a href="{{ route('conta.show', ['conta' => $conta->id]) }}" style="text-decoration: none;">{{ $conta->nome }} </a></strong>: R$
        {{ number_format($conta->valor, 2, ',', '.') }} - {{ $conta->situacaoConta->nome }} -
        {{ \Carbon\Carbon::parse($conta->vencimento)->format('d/m/Y') }}<br>
    @endforeach

    <br><br>
    <p>E-mail enviado pelo sistema Celke.</p>
@endsection

Criado o layout do e-mail em formato de texto no arquivo "resources/views/emails/sendEmailTextContaPagar.blade.php".

Olá,

Contas a pagar: 

@foreach ($contas as $conta)
    - {{ $conta->nome }}: R$ {{ number_format($conta->valor, 2, ',', '.') }} - {{ $conta->situacaoConta->nome }} - {{ \Carbon\Carbon::parse($conta->vencimento)->format('d/m/Y') }}
@endforeach


E-mail enviado pelo sistema Celke.

Para finalizar, é necessário acrescentar no arquivo ".env" as credenciais do servidor responsável por enviar e-mails. No tutorial, é utilizado o servidor IAGENTE para o envio de e-mails.

MAIL_MAILER=smtp
MAIL_HOST=smart.iagentesmtp.com.br
MAIL_PORT=587
MAIL_USERNAME="meu_email_remetente@celke.com.br"
MAIL_PASSWORD=""
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="meu_email_remetente@celke.com.br"
MAIL_FROM_NAME="${APP_NAME}"
MAIL_TO="meu_email_destinatario@gmail.com"

Baixar o código-fonte completo do projeto.

Bom, era isso. Espero que o tutorial tenha sido útil!