# Node Mailer - Sistema de envio de correos reutilizable

Este sistema le permite realizar envíos de correos de forma dinámica, seleccionando un gestor de correos enviado desde la petición HTTP, gestionando en el Back-End, si se trata de una cuenta.


## Instalación:

 - Descargar el repositorio mediante el comando `git clone --url--`
 - Instalar las dependencias con `npm install`
 - Copiar el archivo .env.example y nombrarlo .env
 - Colocar el puerto en el archivo .env. (Por defecto, usar 3000 pero puede utilizar otro si este no esta disponible)
 - Cargar cualquier otra variable de entorno necesaria
 - Ejecutar el comando `npm run dev` para iniciar el servidor


## Creación de usuarios por terminal

Se pueden crear usuarios por terminal, para evitar tener que cargarlos manualmente en la base de datos. Para ello, corra el siguiente comando, con los parametros nombre, correo y contraseña, de la siguiente forma:

    npm run create-user `nombre` `email@mail.com` `password`


## Rutas (API):
 - Status. /api/status. GET:

    Header: vacío. 

    Body: vacío.

    Respuesta:

        { "Status": "API Working and listening" }
        

 - Envío de correos: /api/contact. POST:
    
    Header: application/json - POST. 
    Autenticación: Bearer Token. El Token se envia en el encabezado como sistema de autenticación para evitar usos externos. El mismo no es dinámico actualmente y permite utilizar la API para hacer el envío de correos. El token: `zdWIiOiIxMjM0NTY3O`. Ejemplo:

    Header:

        {
            Accept: "application/json",
            type: "formData",
            Authorization: `Bearer {token}`,
        }


    Body: 

        {
            "email_from": "example@mail.com",
            "provider": "gmail",
            "name": "Nombre",
            "email_to": "recipent@mailinator.com",
            "subject": "Nuevo mensaje parael asunto",
            "message": "Esta es una prueba de cuerpo del mensaje",
            "template": "email",
            "email_from": "correo_quien_completa_form@mail.com",
            "company": "Mi empresa",
            "phone": "77895511"
        }


    Listas de distribución:


        {
            "email_from": "example@mail.com",
            "provider": "gmail",
            "name": "Nombre",
            "email_to": "recipent@mailinator.com",
            "subject": "Nuevo mensaje parael asunto",
            "message": "Esta es una prueba de cuerpo del mensaje",
            "template": "email",
            "email_from": "correo_quien_completa_form@mail.com",
            "company": "Mi empresa",
            "phone": "77895511",
            "cc": [
                "adrian@mail.com",
                "uosolutions@gmail.com",
                "santiago@mail.com"
            ]
        }

    Si necesita envíar correos a una lista de distribución, puede agregar un parametro extra, "cc", con un arreglo que enviará en copia a los correos el correo electronico.

    Este método se encarga de realizar un envio de correo electrónico, utilizando el email que envía en el cuerpo de la petición (JSON), en el valor del campo "email_from". En caso de que el correo con las credenciales se encuentre en la base de datos, el email se envía utilizando las credenciales que se encuentren registradas. El campo provider define el tipo de proveedor que expone el correo. En caso de ser una cuenta de Gmail, colocar "gmail", en caso de ser Outlook, Zoho o GoDaddy, especificarlo en minusculas (ejemplo: "zoho", "godaddy", "outlook"). El valor del campo "template", definirá que maqueta de correo se debe utilizar. En ese caso la respuesta será:


    Status: 201 created
        
        {
            "Status": "Email sent successfully"
        }


    En caso de que se envíe un correo en el campo "email_from" que no existe en la base de datos, se retornará un error:

    Status: 419 unknown

        {
            "message": "No se encontraron credenciales para el correo especificado"
        }

    
    El email no se envía y se retorna el error.

    En caso de que no se envíe token o se envíe uno incorrecto, recibirá:

        {
            "message": "Invalid Token"
        }

    En caso de que su Token falle, contacte con soporte para recibir uno nuevo.


## Rutas (Dashboard):

El panel de administración le permite cargar y gestionar credenciales de correo. Solo necesita un usuario en la base de datos, para ingresar al mismo, y gestionar a nuevos usuarios o para crear credenciales.