es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

SMTP nodemailer, funciona en el localhost pero no en producción.

Desplegué una aplicación en el nivel gratuito de Heroku, utilizando nodemailer configuré una opción en la aplicación para que yo pueda recibir algunos datos JSON de un formulario y utilizar esa información para enviarme un correo electrónico. En localhost, esto funciona bien, lo he probado extensivamente para asegurarme de que funcione, pero cuando intenté probar esto en producción, descubrí que solo devuelve un error 400, que es el código de estado que devuelvo cuando algo sale mal en la lógica del servidor.

/*
  @Desc:   Permite a un usuario enviar un correo de soporte
  @Route:  POST /api/support
  @access: Público
*/
export const sendSupportMail = asyncHandler(async (req, res) => {
  const message =
    <code>Nombre: ${req.body.name} \n</code> +
    <code>Email: ${req.body.email} \n</code> +
    <code>Teléfono: ${req.body.phone} \n</code> +
    <code>Mensaje: ${req.body.message} \n</code>;
  try {
    await sendEmail({
      email: process.env.SUPPORT_EMAIL,
      subject: <code>Correo de soporte</code>,
      message: message,
    });
    res.status(200).json({ success: true });
  } catch (error) {
    res.status(400).json({ success: false, error });
  }
});

Todo esto funcionó en localhost. He estado buscando en Internet y estoy bastante seguro de que este es un problema debido al hosting de nivel gratuito de Heroku. Sin embargo, antes de comprometerme a actualizar el nivel, me gustaría intentar solucionarlo de antemano o al menos recibir una buena explicación de por qué esto no funciona.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema que estás enfrentando con tu aplicación desplegada en el nivel gratuito de Heroku y utilizando nodemailer para enviar correos electrónicos podría deberse a varias razones. Una de las posibilidades podría ser la limitación en el hospedaje de nivel gratuito, lo cual podría causar que el servicio de correo electrónico falle.

    Para solucionar el problema, puedes comenzar por verificar los registros en Heroku para ver si hay errores o advertencias relacionadas con nodemailer o el envío de correos electrónicos. Puedes acceder a los registros ejecutando el comando heroku logs --tail en tu terminal mientras te encuentras en el directorio de tu aplicación de Heroku.

    Otra posible causa del problema podría estar relacionada con la política de CORS (Compartir recursos de origen cruzado), la cual puede evitar que tu aplicación acceda o envíe datos desde diferentes dominios. Puedes intentar agregar los encabezados adecuados en tu código para habilitar CORS en tu ruta de API.

    Además, también puedes intentar utilizar un proveedor de servicios de correo electrónico o un servidor SMTP diferente para enviar correos electrónicos desde tu aplicación. Esto podría solucionar el problema si está relacionado con el servicio de correo electrónico de nivel gratuito de Heroku.

    Si ninguna de las soluciones anteriores funciona, actualizar a un plan de hospedaje de nivel superior en Heroku podría ser la mejor opción para garantizar el rendimiento confiable y consistente de tu aplicación.

Comments are closed.