Iniciar sesión Crear cuenta
Integraciones

Better Auth

Verificación de correo electrónico, restablecimiento de contraseña y magic link de Better Auth enviados por la API de Postal.

Better Auth deja el envío de los correos electrónicos en tus manos: basta con llamar a POST /emails de Postal en los callbacks. No hay ninguna conexión que crear.

#Clave y remitente

Crea una clave solo de envío en Claves de API y guárdala en POSTAL_API_KEY. El remitente debe ser de un dominio verificado.

Envío por Postal
// lib/postal.ts
export async function sendWithPostal(to: string, subject: string, html: string) {
  const response = await fetch('https://api.postal.so/emails', {
    method: 'POST',
    headers: {
      Authorization: `Bearer ${process.env.POSTAL_API_KEY}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      from: 'Minha empresa <[email protected]>',
      to: [to],
      subject,
      html,
    }),
  })

  if (!response.ok) {
    throw new Error(`Postal respondeu ${response.status}: ${await response.text()}`)
  }
}

#Verificación, contraseña y magic link

auth.ts
import { betterAuth } from 'better-auth'
import { magicLink } from 'better-auth/plugins'
import { sendWithPostal } from './lib/postal'

export const auth = betterAuth({
  emailAndPassword: {
    enabled: true,
    requireEmailVerification: true,
    sendResetPassword: async ({ user, url }) => {
      await sendWithPostal(user.email, 'Redefina sua senha', `<p><a href="${url}">Criar nova senha</a></p>`)
    },
  },
  emailVerification: {
    sendOnSignUp: true,
    sendVerificationEmail: async ({ user, url }) => {
      await sendWithPostal(user.email, 'Confirme seu e-mail', `<p><a href="${url}">Confirmar e-mail</a></p>`)
    },
  },
  plugins: [
    magicLink({
      sendMagicLink: async ({ email, url }) => {
        await sendWithPostal(email, 'Seu link de acesso', `<p><a href="${url}">Entrar</a></p>`)
      },
    }),
  ],
})

#Con plantillas de Postal

Para editar los correos electrónicos en el panel en lugar de en el código, crea una plantilla con la variable {{{URL}}} y envía con template en lugar de html:

Cuerpo del POST /emails
{
  from: 'Minha empresa <[email protected]>',
  to: [user.email],
  template: { id: 'confirmar-email', variables: { URL: url } },
}

Para llevar también los registros a la audiencia y disparar automatizaciones, llama a POST /events en el databaseHooks.user.create.after de Better Auth, con el ID del usuario en external_id. Consulta la guía Integra tu app.