Como enviar emails com Gmail e Laravel
guias
Uma das tarefas mais comuns em sistemas web são as notificações por email, neste post vamos aprender como configurar o servidor SMTP do Google para utilização em aplicações Laravel.
Em resumo, tudo que precisamos é ter uma conta Gmail, habilitar a opção para desenvolvedores e colocar algumas credenciais no arquivo .env
do Laravel e pronto! Já seremos capazes de enviar emails dentro de uma aplicação.
Apesar da simplicidade dos passos citados, algumas considerações são necessárias e pode não ser assim tão simples para todo mundo.
Pensando nisso resolvi criar um passo-a-passo sobre como utilizar o Gmail para envio de emails em aplicações Laravel. Bora lá?
Como utilizar o servidor SMTP do Google
O Google, utilizando uma conta no Gmail, nos permite utilizar seu servidor SMTP para disparar emails através de aplicações de terceiros ou, como é nosso caso, em aplicações proprietárias.
Para utilizarmos o servidor SMTP do Google, precisamos ativar o modo “apps menos seguros” nas configurações de conta (Google Accounts) e à partir disso podemos utilizar as credenciais de uma conta Gmail para enviar emails com o Laravel.
Ativando a opção “apps menos seguros”
Neste link encontramos um switch bem simples para desligar ou ligar a funcionalidade que precisamos. Vamos até o site e ligar esta funcionalidade e aqui vale lembrar que precisamos estar com uma conta do Google logada para ativar a funcionalidade.
Caso queira entender mais sobre o acesso de “apps menos seguros” existe esta resposta do próprio Google.
Disclaimer sobre 2FA do google
Se você estiver utilizando autenticações em dois fatores (2FA) para acessar sua conta Google, o acesso para aplicativos menos seguros não poderá ser ativado através do link citado neste post. Neste caso, você terá que entrar utilizando usuário e senha antes e só então acessar o link.
Agora que já temos tudo preparado do lado do servidor SMTP (Gmail) precisamos colocar algumas configurações no Laravel.
Entendendo as configurações de email no Laravel
Nas instalações padrões do Laravel existe um arquivo localizado na pasta config
chamado mail.php
. Neste arquivo encontramos todas as diretivas que o framework utiliza para envios de emails.
Existem várias formas possíveis para envio de email e o Laravel torna muitas delas bastante fáceis, por padrão (no Laravel) utiliza-se o protocolo SMTP e podemos encontrar esta diretiva no arquivo config/mail.php
:
'default' => env('MAIL_MAILER', 'smtp'),
Recomendo fortemente que dêem uma olhada neste arquivo pois todas as diretivas estão lá. Também é interessante ressaltar que além da utilização via SMTP já existem configurações pré-definidas para os serviços mais utilizados como o AWS SES, Mailgun e outros. Caso tenha interesse em saber mais sobre algum deles deixe-me saber .
Como vimos no arquivo config/mail.php
, várias das diretivas de configuração apontam para o arquivo .env
para tornar tudo ainda mais flexível e é nele que vamos colocar as configurações necessárias para enviar emails com o Gmail.
Nas configurações existe uma sessão específica para utilização do protocolo SMTP e nela temos todas as diretivas necessárias, a indicação de qual variável do .env
estas configurações irão utilizar os valores e também qual o valor padrão utilizado caso não seja encontrado nenhum valor no .env
:
...
'smtp' => [
'transport' => 'smtp',
'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
'port' => env('MAIL_PORT', 587),
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'timeout' => null,
'auth_mode' => null,
],
...
Adicionando as configurações do Gmail ao Laravel
O Gmail utiliza a url smtp.gmail.com como host e a porta 587 para TLS e 465 para SSL, outro ponto importante também é o protocolo de segurança utilizado, neste caso vamos utilizar o TLS .
Vamos adicionar estes valores nas variáveis do .env
, precisaremos utilizar as credenciais da conta de Gmail na qual ativamos a funcionalidade “apps menos seguros” no passo anterior.
Em host, port e encryption devemos colocar as diretivas do Gmail já citadas:
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_ENCRYPTION=tls
Em username e password utilizaremos as credenciais da nossa conta do Gmail:
[email protected]
MAIL_PASSWORD=senha_super_segura
Em from_address utilizaremos o remetente padrão dos emails que serão enviados:
[email protected]
O conjunto completo das variáveis do .env
fica assim:
// arquivo .env da raiz do projeto
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_ENCRYPTION=tls
[email protected]
MAIL_PASSWORD=senha_super_segura
[email protected]
À partir deste momento somos capazes de enviar emails na nossa aplicação!
Caso queira ver um exemplo em funcionamento no post sobre verificação por email com Jetstream falo sobre emails de verificação de cadastro e utilizo justamente estas configurações.
Limites de envio de email
Como último ponto de atenção vale ressaltar que, ao utilizar o Gmail como servidor SMTP existe um limite diário de utilização.
Os limites que se aplicam para utilização em apps de terceiros ou proprietários seguem estas diretrizes e conforme indicado no quadro Destinatários por mensagem enviada via SMTP (por usuários de POP ou IMAP) ou pela API do Gmail
, ou seja, 100 emails/dia.
Caso precise enviar mais emails do que os limites diários, será interessante utilizar um serviço diferente como AWS SES ou utilizar disparos de emails via API do Google pois possuem limites diferentes e planos que podem ser contratados a parte para atender cada necessidade.
Caso o limite diários seja excedido alguns erros serão gerados e caso estes limites sejam excedidos com frequência pode haver um bloqueio da conta além de a conta poder ser marcada como spam, então use com consciência!
Conclusão
Em apenas alguns passos simples somos capazes de enviar emails dentro de uma aplicação Laravel utilizando um servidor gratuito e de grande autoridade como o do Gmail. Apesar de simples e com baixas cotas de envio diário, utilizar o Gmail pode ser um alternativa interessante para aplicações pequenas ou em provas de conceito sem a necessidade da contratação de um serviço mais parrudo.
Espero ter ajudado de alguma maneira e caso queira receber uma notificação a cada novo post assine o feed gratuito em seu agregador RSS favorito.