enviar e-mails com o ses da amazon no laravel
Para enviar e-mails usando o Amazon SES (Simple Email Service) no Laravel, você precisa configurar o Laravel para usar o SES como seu provedor de serviços de e-mail. Vou te guiar pelo processo passo a passo.
Passo 1: Configurar o SES na AWS
- Crie uma conta na AWS (se ainda não tiver uma).
- Acesse o serviço SES:
- No painel da AWS, procure por “SES” (Simple Email Service).
- No SES, verifique seu endereço de e-mail e domínio, se ainda não tiver feito isso. Você pode precisar passar pelo processo de verificação de e-mail e de domínio para poder enviar e-mails em produção.
- Obtenha as credenciais SMTP:
- Na seção de Credenciais SMTP, você pode gerar um Access Key ID e um Secret Access Key, que você usará para configurar o Laravel.
- Certifique-se de que a região do SES esteja configurada corretamente (ex:
us-east-1
).
Passo 2: Instalar o Laravel
Se você ainda não tem um projeto Laravel, crie um novo com o seguinte comando:
composer create-project --prefer-dist laravel/laravel nome-do-projeto
Passo 3: Instalar o pacote de e-mail no Laravel
Laravel já vem com suporte nativo para o envio de e-mails, mas você pode precisar instalar o pacote aws/aws-sdk-php
para se conectar ao SES diretamente:
composer require aws/aws-sdk-php
Passo 4: Configurar o arquivo .env
No arquivo .env
do seu projeto Laravel, adicione as seguintes variáveis para configurar o SES:
MAIL_MAILER=ses
MAIL_HOST=email-smtp.us-east-1.amazonaws.com # Altere a região conforme necessário
MAIL_PORT=587
MAIL_USERNAME=seu-smtp-username
MAIL_PASSWORD=seu-smtp-password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=seu-email-verificado@dominio.com
MAIL_FROM_NAME="${APP_NAME}"
- MAIL_HOST: O host SMTP para o SES, que varia dependendo da região. Exemplo:
email-smtp.us-east-1.amazonaws.com
. - MAIL_USERNAME e MAIL_PASSWORD: As credenciais SMTP fornecidas pelo SES.
Passo 5: Configurar o config/mail.php
O Laravel já tem um arquivo de configuração config/mail.php
para e-mails. Abra esse arquivo e verifique se as configurações do SES estão corretas. O Laravel usa o valor do .env
automaticamente, então você só precisa garantir que o MAIL_MAILER
esteja configurado para ses
.
No arquivo config/mail.php
:
'mailers' => [
'smtp' => [
'transport' => 'smtp',
'host' => env('MAIL_HOST', 'smtp.mailtrap.io'),
'port' => env('MAIL_PORT', 587),
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'timeout' => null,
],
'ses' => [
'transport' => 'ses',
],
],
O Laravel tem suporte nativo para o SES a partir da versão 7.x, por isso, ao configurar MAIL_MAILER=ses
no .env
, ele já usará o transportador adequado.
Passo 6: Testar o envio de e-mails
Agora você pode testar o envio de e-mails com o SES. Crie um e-mail simples utilizando o Mail do Laravel.
Exemplo de envio de e-mail no Laravel:
- Criar um Mailable:
No terminal, execute o seguinte comando para gerar um mailable:
php artisan make:mail TestEmail
- Definir o conteúdo do e-mail:
Edite o arquivo app/Mail/TestEmail.php
:
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class TestEmail extends Mailable
{
use Queueable, SerializesModels;
public function build()
{
return $this->view('emails.test')
->subject('Teste de E-mail SES');
}
}
- Criar a view para o e-mail:
Crie a view resources/views/emails/test.blade.php
:
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Teste de E-mail SES</title>
</head>
<body>
<h1>Esse é um e-mail de teste usando o SES!</h1>
</body>
</html>
- Enviar o e-mail:
Agora, você pode enviar o e-mail em algum controlador ou diretamente no Tinker:
use App\Mail\TestEmail;
use Illuminate\Support\Facades\Mail;
// Enviar um e-mail
Mail::to('destinatario@dominio.com')->send(new TestEmail());
Passo 7: Verificar o envio
Se tudo estiver configurado corretamente, o e-mail será enviado usando o SES da Amazon. Verifique sua caixa de entrada para ver se o e-mail chegou. Se não, consulte o painel do SES na AWS para verificar se houve erros, como limites de envio ou problemas de verificação.
Passo 8: Configuração adicional (opcional)
- Limites de envio: Quando você usa o SES no ambiente de sandbox, há limites de envio. Para aumentar esses limites, você precisará solicitar a mudança para o ambiente de produção no console do SES.
- Monitoramento: O SES fornece métricas detalhadas sobre o envio de e-mails, como taxa de rejeição, bounces e reclamações de spam. Você pode configurar notificações para monitorar esses aspectos.
Conclusão
Agora, seu Laravel deve estar configurado para enviar e-mails usando o Amazon SES. Você pode personalizar os e-mails, como incluir anexos ou enviar e-mails em massa, usando as funcionalidades que o Laravel fornece para o envio de e-mails.
Se você encontrar algum problema ou tiver dúvidas, pode verificar os logs do Laravel (storage/logs/laravel.log
) ou os logs do SES para identificar possíveis falhas de envio.