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

  1. Crie uma conta na AWS (se ainda não tiver uma).
  2. 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.
  3. 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:

  1. Criar um Mailable:

No terminal, execute o seguinte comando para gerar um mailable:

php artisan make:mail TestEmail
  1. 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');
    }
}
  1. 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>
  1. 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.

Posts Similares