Desenvolvedores
src_
utils_
brevoAdapter.ts

Explicação do Código 📚

1. Importação de Dependências 📦

import axios from 'axios';
import { EmailAdapter, SendEmailOptions } from 'payload';
  • axios: Biblioteca para fazer requisições HTTP. Usamos axios para fazer a requisição POST para a API do Brevo.
  • EmailAdapter e SendEmailOptions: Tipos de dados do Payload CMS. O EmailAdapter é uma interface para a integração com serviços de envio de e-mails, enquanto SendEmailOptions define os dados que serão passados para o envio.

2. Definindo o Adaptador brevoAdapter 🔧

const brevoAdapter = (): EmailAdapter => {
  const adapter = () => ({
    name: 'brevo',
    defaultFromAddress: process.env.BREVO_SENDER_EMAIL as string,
    defaultFromName: process.env.BREVO_SENDER_NAME as string,
  • A função brevoAdapter retorna um adaptador para o envio de e-mails com a API do Brevo.
  • name: Nome do adaptador, utilizado para identificá-lo.
  • defaultFromAddress: O endereço de e-mail de origem (remetente), obtido a partir das variáveis de ambiente.
  • defaultFromName: O nome do remetente, também configurado nas variáveis de ambiente.

3. Função sendEmail para Envio de E-mail 📧

sendEmail: async (message: SendEmailOptions): Promise<unknown> => {
  if (!process.env.BREVO_EMAILS_ACTIVE) {
    console.log('Emails disabled, logging to console');
    console.log(message);
    return;
  }
  • sendEmail: A função que realiza o envio do e-mail, utilizando os dados fornecidos no parâmetro message.
  • process.env.BREVO_EMAILS_ACTIVE: Verifica se o envio de e-mails está ativo. Caso contrário, o e-mail será apenas registrado no console.

4. Configuração da Requisição com axios 🌐

try {
  const res = await axios({
    method: 'post',
    url: 'https://api.brevo.com/v3/smtp/email',
    headers: {
      'api-key': process.env.BREVO_API_KEY as string,
      'Content-Type': 'application/json',
      Accept: 'application/json',
    },
    data: {
      sender: {
        name: process.env.BREVO_SENDER_NAME as string,
        email: process.env.BREVO_SENDER_EMAIL as string,
      },
      to: [
        {
          email: message.to,
        },
      ],
      subject: message.subject,
      htmlContent: message.html,
    },
  });
  return res.data;
} catch (error) {
  console.error('Error sending email with Brevo', error);
}
  • Requisição POST: Envia o e-mail para o endpoint da API do Brevo.
    • url: URL do endpoint da API do Brevo para envio de e-mails.
    • headers: Define os cabeçalhos da requisição, incluindo a chave de API do Brevo e os tipos de conteúdo.
    • data: Contém o corpo da requisição, com as informações necessárias para o envio, como remetente, destinatário, assunto e conteúdo HTML do e-mail.

5. Retorno e Tratamento de Erros ⚠️

Se o envio for bem-sucedido, a resposta da API será retornada. Caso haja erro, o erro será capturado e registrado no console.

6. Retorno do Adaptador 🚀

return adapter;

O adaptador é retornado para ser utilizado no sistema, fornecendo uma interface unificada para o envio de e-mails.

7. Exportação do Adaptador 📤

export default brevoAdapter;

Por fim, o adaptador é exportado para que possa ser utilizado em outras partes da aplicação.

Código Completo 📜

import axios from 'axios';
import { EmailAdapter, SendEmailOptions } from 'payload';
 
const brevoAdapter = (): EmailAdapter => {
  const adapter = () => ({
    name: 'brevo',
    defaultFromAddress: process.env.BREVO_SENDER_EMAIL as string,
    defaultFromName: process.env.BREVO_SENDER_NAME as string,
    sendEmail: async (message: SendEmailOptions): Promise<unknown> => {
      if (!process.env.BREVO_EMAILS_ACTIVE) {
        console.log('Emails disabled, logging to console');
        console.log(message);
        return;
      }
 
      try {
        const res = await axios({
          method: 'post',
          url: 'https://api.brevo.com/v3/smtp/email',
          headers: {
            'api-key': process.env.BREVO_API_KEY as string,
            'Content-Type': 'application/json',
            Accept: 'application/json',
          },
          data: {
            sender: {
              name: process.env.BREVO_SENDER_NAME as string,
              email: process.env.BREVO_SENDER_EMAIL as string,
            },
            to: [
              {
                email: message.to,
              },
            ],
            subject: message.subject,
            htmlContent: message.html,
          },
        });
 
        return res.data;
      } catch (error) {
        console.error('Error sending email with Brevo', error);
      }
    },
  });
 
  return adapter;
};
 
export default brevoAdapter;