Skip to main content

Emails

Configuración Inicial

En el panel de configuración de Settings, puedes encontrar la sección de Email Plugins, donde puedes probar el envío de correos electrónicos. Por defecto, esta funcionalidad no viene configurada, por lo que necesitarás realizar la configuración manualmente.

Panel de configuración

Si deseas utilizar proveedores externos, sigue la guía oficial disponible en esta URL. La documentación te ayudará a identificar el proveedor adecuado y configurar correctamente los ajustes necesarios.

Configuración en config/plugins.js

A continuación, se muestra un ejemplo de configuración utilizando el proveedor Resend:

module.exports = ({ env }) => ({
email: {
config: {
provider: 'strapi-provider-email-resend',
providerOptions: {
apiKey: env('RESEND_API_KEY'),
},
settings: {
defaultFrom: 'luisaux9@gmail.com',
defaultReplyTo: 'luisaux9@gmail.com',
},
},
},
});

En caso de que el proveedor deseado no tenga un plugin específico, puedes configurar un cliente SMTP, como Nodemailer, de la siguiente manera:

module.exports = ({ env }) => ({
email: {
config: {
provider: 'nodemailer',
providerOptions: {
host: env('SMTP_HOST'),
port: env('SMTP_PORT'),
auth: {
user: env('SMTP_USERNAME'),
pass: env('SMTP_PASSWORD'),
},
},
settings: {
defaultFrom: 'elmer.swift17@ethereal.email',
defaultReplyTo: 'elmer.swift17@ethereal.email',
},
},
},
});

Configura las variables de entorno correspondientes:

SMTP_HOST=smtp.ethereal.email
SMTP_PORT=587
SMTP_USERNAME=elmer.swift17@ethereal.email
SMTP_PASSWORD=kMNyesX3f29cuXU1kg

Envío de Emails desde Servicios o Controladores

Puedes enviar correos electrónicos desde los servicios o controladores de Strapi. Es importante notar que los controladores solo funcionan cuando las peticiones se realizan a través de la API, no desde el panel de control.

Ejemplo en un Controlador

'use strict';

const { createCoreController } = require('@strapi/strapi').factories;

module.exports = createCoreController('api::endpoints.endpoints', ({ strapi }) => ({
async exampleAction(ctx) {
try {
const result = await strapi.plugins["email"].services.email.send({
from: "elmer.swift17@ethereal.email",
to: "luis.ocampo@inmersys.com",
subject: "Hello World",
html: `<p>Hola</p>`,
});

console.log("Correo enviado:", result);
ctx.body = 'Correo enviado con éxito';
} catch (err) {
console.error("Error al enviar correo:", err);
ctx.body = err;
}
},
}));

Uso de Lifecycles para Envío Automático

Si necesitas realizar acciones automáticas, como enviar un email después de actualizar o crear un recurso, utiliza los Lifecycles. Aquí tienes un ejemplo:

const { errors: { ApplicationError } } = require('@strapi/utils');

module.exports = {
async beforeUpdate(event) {
const { params: { data } } = event;
console.log("Antes de actualizar:", data);

const number = Math.floor(Math.random() * 20) + 1;
try {
const response = await fetch(`https://rickandmortyapi.com/api/character/${number}`);
if (!response.ok) {
throw new ApplicationError(`Error al obtener el personaje: ${response.statusText}`);
}
const rickCharacter = await response.json();
data.response = rickCharacter;
} catch (error) {
console.error("Error al realizar la solicitud:", error);
}
},
async afterUpdate(event) {
const { params: { data } } = event;
console.log("Después de actualizar:", data);

try {
const emailResult = await strapi.plugins["email"].services.email.send({
from: "elmer.swift17@ethereal.email",
to: "luis.ocampo@inmersys.com",
subject: "Actualización completada",
html: `<p>Se actualizó el siguiente dato:</p><pre>${JSON.stringify(data, null, 2)}</pre>`,
});

console.log("Correo enviado con éxito:", emailResult);
} catch (error) {
console.error("Error al enviar el correo:", error);
}
},
};

Consideraciones Finales

  • Asegúrate de que las variables de entorno estén correctamente configuradas en tu sistema o archivo .env.
  • Prueba los envíos de correo desde el panel de Email Plugins antes de integrarlo con tus controladores o servicios.
  • Consulta siempre la documentación oficial de Strapi para conocer las mejores prácticas.