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!