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. Usamosaxios
para fazer a requisiçãoPOST
para a API do Brevo.EmailAdapter
eSendEmailOptions
: 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âmetromessage
.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;