Do not speak Portuguese? Translate this site with Google or Bing Translator
Como enviar e-mail em massa no Laravel com Amazon (AWS) SES

Posted on: March 14, 2022 12:24 PM

Posted by: Renato

Views: 1351

Como enviar e-mail em massa no Laravel com Amazon (AWS) SES

Envio de e-mail em massa no Laravel com Amazon SES permitido o envio Limit, isso será útil se você quiser enviar mais e-mails por segundo para seu cliente e usuários.

O melhor suporte por e-mail para Laravel - Simple Email Service (SES) da Amazon

O Amazon SES possui limites rígidos no número de e-mails que pode enviar por segundo. Portanto, se nosso aplicativo ultrapassar esse limite, o SES descartará os e-mails acima desse limite. Isso não é um problema no envio de emails transacionais, ao enviar campanhas é importante acompanhar a velocidade de envio.

Com acesso à caixa de areia, você pode enviar e-mails para e-mails verificados no SES. Se você quiser sair da caixa de areia, você deve solicitar o aumento do limite de envio de SES. Depois de sair do sandbox, você pode começar a enviar mais e-mails para seus usuários em um limite por segundo.

 

Etapas para enviar e-mail em massa no Laravel com Amazon (AWS) SES

  • Criar credenciais de usuário com o Amazon SES
  • Configurar o Laravel para usar suas credenciais do Amazon SES
  • Configurando e instalando o Amazon AWS SDK no Laravel
  • Envie e-mails em massa com a API da AWS em Laravel

 

 

Etapa 1. Criar credenciais de usuário com o Amazon SES

Ao fazer login na AWS, vá para a lista de serviços da web da Amazon, onde você precisa selecionar SES.

 

Lista de Amazon Web Services

Lista de Amazon Web Services

Depois de selecionar SES, você será redirecionado para o SES Dashboard. Lá você pode ver os limites de envio, número de emails enviados e algumas métricas.

 

PAINEL SES da Amazon Web Services

Painel SES

Novas contas de usuário no SES estão no modo sandbox e podem enviar e-mails apenas para e-mails verificados no SES com determinado limite de envio. Ao solicitar um aumento do limite de envio, você obterá uma melhor velocidade de envio e seu aplicativo poderá enviar e-mails para qualquer endereço.

O AWS SES possui uma ótima API, que pode ser útil para grandes campanhas de e-mail. Para gerar um novo conjunto de chaves, você deve visitar Conta - Minhas credenciais de segurança.

Ao clicar no botão Get Started with IAM Users, você será redirecionado para a página do IAM. O IAM é um sistema da AWS para gerenciamento de identidades (simplificado: geração de chaves para diferentes serviços da AWS). Crie sua conta de usuário e obtenha sua chave de acesso e chave secreta.

Se você tiver problemas para criar chaves de conta, basta seguir nosso tutorial sobre como configurar a conta de usuário do Amazon IAM para envio de e-mail.

Agora temos todas as informações necessárias para enviar e-mails usando o AWS SES.

Nos sistemas de produção, a AWS solicita aos remetentes que tenham web hooks que capturarão a devolução e cumprirão as solicitações da AWS. Abordaremos isso em alguns dos tutoriais futuros.

Vale a pena ler

1.  Práticas recomendadas de envio de e-mail do Amazon Simple Email Service
2.  Guia do desenvolvedor

 

Etapa 2. Configurar o Laravel para usar suas credenciais do Amazon SES

Inserindo detalhes de SMTP no arquivo .env
MAIL_DRIVER=smtp 
MAIL_HOST=email-smtp.us-west-2.amazonaws.com 
MAIL_PORT=587 
MAIL_USERNAME=XXXXXXXXXXXXXXXXXXXXXXXX 
MAIL_PASSWORD=XXXXXXXXXXXXXXXXXXXXXXXX 
MAIL_ENCRYPTION=tls

Se precisar enviar e-mails em massa, você pode fornecer suas credenciais da Aws no arquivo para o qual está enviando o e-mail. Para nossos aplicativos Laravel, podemos usar qualquer serviço de fila, como Redis, Amazon SQS, Beanstalk e muito mais. Para nosso projeto, usaremos o Beanstalk como Queue. Para detalhes de instalação e envio de e-mails na fila, leia nosso tutorial dedicado ao Beanstalk e Laravel Queue.

Se você estiver na fase de teste, poderá usar o driver de sincronização ou o banco de dados para a fila, que imitará a fila sem realmente usá-lo. Isso ajuda você a codificar tudo como se houvesse uma fila, mas sem realmente configurá-la.

No arquivo .env:
QUEUE_DRIVER=sincronizar

ou

QUEUE_DRIVER=banco de dados

Mais tarde, você mudará isso com o Beanstalk ou o driver redis para Laravel

 

Etapa 3. Configurando e instalando o Amazon AWS SDK no Laravel

 

Instalando o AWS SDK para PHP

Você pode seguir as etapas fornecidas nos documentos do GitHub ou do Amazon SES .

 

O AWS Service Provider pode ser instalado via Composer exigindo o pacote aws/aws-sdk-php-laravel no composer.json do seu projeto.

{ 
  "require": { 
    "aws/aws-sdk-php-laravel": "~3.0" 
  } 
}

Em seguida, execute uma atualização do compositor

atualização do php composer.phar

Para usar o AWS Service Provider, você deve registrar o provedor ao inicializar seu aplicativo.

Lúmen

No Lumen, encontre o Register Service Providers em seu bootstrap/app.php e registre o AWS Service Provider.

  $app->register(Aws\Laravel\AwsServiceProvider::class);

Laravel

No Laravel encontre a chave do provedor em seu config/app.php e registre o AWS Service Provider.

  'providers' => array( 
    // ... 
    Aws\Laravel\AwsServiceProvider::class, 
  )

Encontre a chave de aliases em seu config/app.php e adicione o alias de fachada da AWS.

  'aliases' => array( 
    // ... 
    'AWS' => Aws\Laravel\AwsFacade::class, 
  )

Configuração

Por padrão, o pacote usa as seguintes variáveis ​​de ambiente para configurar automaticamente o plug-in sem modificação:

AWS_ACCESS_KEY_ID 
AWS_SECRET_ACCESS_KEY 
AWS_REGION (padrão = us-east-1)

Para personalizar o arquivo de configuração, publique a configuração do pacote usando Artisan.

php artisan vendor:publish --provider="Aws\Laravel\AwsServiceProvider"

Atualize suas configurações no arquivo de configuração app/config/aws.php gerado.

return [ 
  'credentials' => [ 
    'key' => 'YOUR_AWS_ACCESS_KEY_ID', 
    'secret' => 'YOUR_AWS_SECRET_ACCESS_KEY', 
  ], 
  'region' => 'us-west-2', 
  'version' => 'latest', 

  // Você pode substituir as configurações de serviços específicos 
  'Ses' => [ 
    'region' => 'us-east-1', 
  ], 
];

Consultando o guia de atualização do Laravel 5.2.0, você deve usar o arquivo de configuração em vez da opção de variável de ambiente se estiver usando php artisan config:cache.

 

Etapa 4. Enviar e-mail em massa com API Aws em Laravel

 

 

Você pode usar diferentes métodos para testar sua aplicação, no nosso caso usaremos o Laravel Controller

Alguns métodos simples para testar o envio de e-mail em massa no Laravel

1. Criando um comando Laravel e adicionando a parte de envio de e-mail a uma fila Laravel

2. Crie um comando e teste no seu terminal

3. Criar um Controller simples e testar os resultados.

 

Código:

<?php 
namespace App\Http\Controllers; 
usar Log; 
use Exceção; 
use Aws\CommandPool; 
use Aws\Ses\SesClient; 
use GuzzleHttp\Client; 
use Aws\ResultInterface; 
use Aws\CommandInterface; 
use Illuminate\Http\Request; 
use Aws\Exception\AwsException; 
use Illuminate\Queue\SerializaModels; 
use GuzzleHttp\Promise\PromiseInterface; 
use GuzzleHttp\Exception\GuzzleException; 
class TestController extends Controller 
{ 
 public function test() 
  { 
    $client = new SesClient([ 
      'version' => 'latest', 
      'region' => 'us-west-2', 
      'credentials' => [ 
        'key'
        'segredo' => 'XXXXXXXXXXXXXXXXXX', 
      ], 
    ]); 
      $recipients = [ 
      '[email protected]', 
        '[email protected]', 
        '[email protected]', 
      ]; 
     // Embaralha os destinatários para fins de teste 
    shuffle($recipients); 
    // Enfileira de emails como comandos SendEmail 
      $i = 100; 
    $comandos = []; 
    foreach ($recipients as $recipient) { 
        $commands[] = $client->getCommand('SendEmail', [ 
         // Passa o id da mensagem para que possa ser atualizado após o processamento (é ignorado pelo SES) 
          'x-message -id' => $i, 
          'Source' => 'Teste paralelo AWS SES <[email protected]>', 
         '
            'ToAddresses' => [$recipient], 
        ], 
        'Message' => [ 
           'Subject' => [ 
             'Data' => 'SES API test', 
              'Charset' => 'UTF-8', 
           ], 
           'Body ' => [ 
            'Html' => [ 
                'Dados' => 'Este é um <b>teste</b>.', 
                'Charset' => 'UTF-8', 
              ], 
            ], 
         ], 
      ]); 
       $i++; 
      } 
      try 
    { 
        $timeStart = microtime(true); 
        $pool = new CommandPool($client, $commands, [ 
         'simultaneidade' => 10, 
        'antes' =>
     
          // echo sprintf('Prestando para enviar %d: %s' . PHP_EOL, $iteratorId, $a['Destination']['ToAddresses'][0]); 
            Log::info('Para enviar ' .$iteratorId .': '. $a['Destination']['ToAddresses'][0]); 
        }, 
        'fulfilled' => function (ResultInterface $result, $iteratorId) use ($commands) { 
          // echo sprintf( 
            // 'Concluído %d: %s' . PHP_EOL, 
          // $commands[$iteratorId][' x-message-id'], 
            // $commands[$iteratorId]['Destination']['ToAddresses'][0] 
           // ); 
          Log::info('Concluído ' .$commands[$iteratorId]['x-message-id'].' :'.$commands[$iteratorId]['Destination']['ToAddresses'][0]);
    
    
          // echo sprintf( 
            // 'Falha %d: %s' . PHP_EOL, 
          // $commands[$iteratorId]['x-message-id'], 
            // $commands[$iteratorId]['Destination'][ 'ToAddresses'][0] 
           // );       Log::info('Motivo: '.$motivo);       Log::error('Amazon SES Failed Rejected:' . $commands[$iteratorId]['x-message-id'] . ' :' . $commands[$iteratorId]['Destination']['ToAddresses'][ 0]);     },   ]);   // Inicia as transferências do pool   $promise = $pool->promise();   // Força o pool a completar de forma síncrona   $promise->wait();   $timeEnd = microtime(true);   // echo sprintf('Operação concluída em %s segundos' . PHP_EOL, $timeEnd - $timeStart); } catch (Exceção $e) {
          
     
      
      
    
     
     
    
    
      
     
      
      // echo sprintf('Erro: %s' . PHP_EOL, $e->getMessage()); 
      Log::error('Catch Block: Amazon SES Exception : ' . $e->getMessage()); 
      } 
  } 
}
 

Espero que o tutorial tenha ajudado você. Boa sorte. Saúde!

Fonte:

https://vannstudios.com/send-bulk-email-in-laravel-with-amazon-ses-t-1


2

Share
About Author

Renato

Developer

Add a Comment
Comments 0 Comments

No comments yet! Be the first to comment

Blog Search


Categories

OUTROS (12) Variados (109) PHP (108) Laravel (116) Black Hat (3) front-end (25) linux (86) postgresql (35) Docker (14) rest (4) soap (1) webservice (6) October (1) CMS (2) node (7) backend (10) ubuntu (41) devops (22) nodejs (5) npm (2) nvm (1) git (4) firefox (1) react (6) reactnative (5) collections (1) javascript (5) reactjs (7) yarn (0) adb (1) solid (0) blade (2) models (1) controllers (0) log (0) html (2) hardware (2) aws (14) Transcribe (2) transcription (1) google (3) ibm (1) nuance (1) PHP Swoole (4) mysql (22) macox (2) flutter (1) symfony (1) cor (1) colors (2) homeOffice (2) jobs (2) imagick (2) ec2 (1) sw (1) websocket (1) markdown (1) ckeditor (1) tecnologia (13) faceapp (1) eloquent (11) query (2) sql (35) ddd (3) nginx (6) apache (4) certbot (1) lets-encrypt (2) debian (9) liquid (1) magento (2) ruby (1) LETSENCRYPT (1) Fibonacci (1) wine (1) transaction (1) pendrive (1) boot (1) usb (1) prf (1) policia (1) federal (1) lucena (1) mongodb (4) paypal (1) payment (1) zend (1) vim (2) ciencia (6) js (1) nosql (1) java (1) JasperReports (1) phpjasper (1) covid19 (1) saude (1) athena (1) cinnamon (1) phpunit (1) binaural (1) mysqli (3) database (33) windows (2) vala (1) json (2) oracle (1) mariadb (2) dev (12) webdev (24) s3 (4) storage (1) kitematic (1) gnome (2) web (2) intel (1) piada (1) cron (2) dba (13) lumen (1) ffmpeg (2) android (2) aplicativo (1) fedora (2) shell (3) bash (2) script (3) lider (1) htm (1) csv (1) dropbox (1) db (3) combustivel (2) haru (1) presenter (1) gasolina (1) MeioAmbiente (1) Grunt (0) biologia (1) programming (20) performance (2) brain (1) smartphones (1) telefonia (1) privacidade (1) opensource (1) microg (1) iode (1) ssh (1) zsh (1) terminal (1) dracula (1) spaceship (1) mac (1) idiomas (1) laptop (1) developer (27) api (1) data (1) matematica (1) seguranca (2) 100DaysOfCode (6) hotfix (1) documentation (1) laravel (2) RabbitMQ (1) Elasticsearch (1) redis (1) Raspberry (3) Padrao de design (4) JQuery (1) angularjs (2) Dicas (12) kubenetes (1) vscode (1) backup (1) angular (1) servers (2) pipelines (1) AppSec (1) DevSecOps (2) rust (1) RustLang (1) Mozilla (1) algoritimo (1) sqlite (1) Passport (1) jwt (1) security (1) translate (1) kube (1) iot (1) politica (1) bolsonaro (1) flow (1) podcast (1) Brasil (1) containers (2) traefik (1) networking (1) host (1) POO (1) microservices (1) bug (1) cqrs (1) arquitetura (1) Architecture (1)

New Articles



Get Latest Updates by Email