Descripción general de las funcionalidades
Envíe correos electrónicos y notificaciones a sus usuarios.
Nota: Este es contenido de ejemplo/marcador de posición con fines de demostración.
La aplicación incluye funcionalidad de correo electrónico para mensajes transaccionales y notificaciones a los usuarios.
Configuración del correo electrónico
Correo electrónico de Supabase (predeterminado)
De forma predeterminada, los correos electrónicos se envían a través de Supabase:
- Correos de autenticación (registro, restablecimiento de contraseña, enlaces mágicos)
- Verificación del correo electrónico
- Confirmación del cambio de correo electrónico
SMTP personalizado
Para los correos electrónicos transaccionales, configure su propio proveedor SMTP:
# .env SMTP_HOST=smtp.example.com SMTP_PORT=587 SMTP_USER=your-username SMTP_PASSWORD=your-password SMTP_FROM_EMAIL=noreply@yourdomain.com SMTP_FROM_NAME=Your App Name
Enviar correos electrónicos
Uso del servicio de correo electrónico
import { sendEmail } from '~/lib/email/send-email';
await sendEmail({
to: 'user@example.com',
subject: 'Welcome to Our App',
html: '<h1>Welcome!</h1><p>Thanks for signing up.</p>',
});
Uso de plantillas de correo electrónico
Cree plantillas de correo electrónico reutilizables:
// lib/email/templates/welcome-email.tsx
import { EmailTemplate } from '~/lib/email/email-template';
interface WelcomeEmailProps {
name: string;
loginUrl: string;
}
export function WelcomeEmail({ name, loginUrl }: WelcomeEmailProps) {
return (
<EmailTemplate>
<h1>Welcome, {name}!</h1>
<p>We're excited to have you on board.</p>
<a href={loginUrl}>Get Started</a>
</EmailTemplate>
);
}
// Enviar el correo electrónico
import { render } from '@react-email/render';
import { WelcomeEmail } from '~/lib/email/templates/welcome-email';
const html = render(
<WelcomeEmail name="John" loginUrl="https://app.com/login" />
);
await sendEmail({
to: 'john@example.com',
subject: 'Welcome to Our App',
html,
});
Tipos de correo electrónico
Correos electrónicos transaccionales
Correos electrónicos desencadenados por acciones del usuario:
- Correos de bienvenida
- Confirmaciones de pedido
- Restablecimientos de contraseña
- Notificaciones de la cuenta
- Actualizaciones de facturación
Correos electrónicos de marketing
Correos electrónicos promocionales y de fidelización:
- Novedades del producto
- Anuncios de funcionalidades
- Boletines informativos
- Secuencias de incorporación
Proveedores de correo electrónico
Proveedores recomendados
Resend - API de correo electrónico pensada para desarrolladores
npm install resend
import { Resend } from 'resend';
const resend = new Resend(process.env.RESEND_API_KEY);
await resend.emails.send({
from: 'noreply@yourdomain.com',
to: 'user@example.com',
subject: 'Welcome',
html: emailHtml,
});
SendGrid - Plataforma de correo electrónico completa
npm install @sendgrid/mail
import sgMail from '@sendgrid/mail';
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
await sgMail.send({
to: 'user@example.com',
from: 'noreply@yourdomain.com',
subject: 'Welcome',
html: emailHtml,
});
Postmark - Correo electrónico transaccional rápido
npm install postmark
Notificaciones dentro de la aplicación
Sistema de notificaciones
Envíe notificaciones dentro de la aplicación a los usuarios:
import { createNotification } from '~/lib/notifications';
await createNotification({
userId: user.id,
title: 'New Message',
message: 'You have a new message from John',
type: 'info',
link: '/messages/123',
});
Tipos de notificación
type NotificationType = 'info' | 'success' | 'warning' | 'error';
await createNotification({
userId: user.id,
title: 'Payment Successful',
message: 'Your subscription has been renewed',
type: 'success',
});
Obtener notificaciones
import { getUserNotifications } from '~/lib/notifications';
const notifications = await getUserNotifications(userId, {
limit: 10,
unreadOnly: true,
});
Marcar como leída
import { markNotificationAsRead } from '~/lib/notifications';
await markNotificationAsRead(notificationId);
Notificaciones en tiempo real
Use Supabase Realtime para enviar notificaciones instantáneas:
'use client';
import { useEffect } from 'react';
import { useSupabase } from '@kit/supabase/hooks/use-supabase';
export function NotificationListener() {
const supabase = useSupabase();
useEffect(() => {
const channel = supabase
.channel('notifications')
.on(
'postgres_changes',
{
event: 'INSERT',
schema: 'public',
table: 'notifications',
filter: `user_id=eq.${userId}`,
},
(payload) => {
// Mostrar una notificación toast
toast.info(payload.new.title);
}
)
.subscribe();
return () => {
supabase.removeChannel(channel);
};
}, [supabase]);
return null;
}
Buenas prácticas para plantillas de correo electrónico
- Manténgalo simple - Texto sin formato y HTML mínimo
- Adaptado a móviles - La mayoría de los correos se leen en el móvil
- Llamadas a la acción claras - Haga que los botones de acción destaquen
- Personalice - Use el nombre del usuario y datos relevantes
- Pruebe la visualización - Compruébela en distintos clientes de correo
- Incluya texto sin formato - Ofrezca siempre una alternativa en texto
- Enlace para darse de baja - Obligatorio en los correos de marketing
Pruebas de correos electrónicos
Desarrollo local
En desarrollo, InBucket intercepta los correos electrónicos:
http://localhost:54324
Vista previa de correos electrónicos
Use React Email para previsualizar las plantillas:
npm run email:dev
Visite http://localhost:3001 para ver las vistas previas de los correos electrónicos.
Consejos de entregabilidad
- Autentique su dominio - Configure SPF, DKIM y DMARC
- Caliente su dominio - Empiece con volúmenes bajos
- Supervise las tasas de rebote - Manténgalas por debajo del 5 %
- Evite los desencadenantes de spam - No escriba todo en mayúsculas ni abuse de los signos de puntuación
- Aporte valor - Envíe solo correos relevantes y útiles
- Baja sencilla - Permita darse de baja con un solo clic