Integración de Velneo con Sendinblue

Buenas,tenía la necesidad de integrar Velneo con alguna plataforma de correo transaccional y ya que me he puesto, he decidio hacer un video didactico de los pasos que he seguido y de como los podeis integrar vosotros en vuestras aplicaciones. El ejemplo es bastante sencillo ya que quería que el video se hiciese lo más corto posible. De todas maneras si alguién necesita cualquier tipo de ayuda para hacer algo más completo, si me lo escribe en este post, le intentaré ayudar.

https://www.youtube.com/watch?v=sV5UPNm3fEA

Dejo el Javascript utilizado a continuación

importClass("XMLHttpRequest");
importClass("VFile");

//OBJETO BÁSICO PRINCIPAL PARA EL ENVIO DEL CORREO
let obj = 
{
	"sender":
	{
		"name":"TU_NOMBRE",
		"email":"EMAIL_DE_ENVIO"
	},
	"to":[{
		"name":"NOMBRE_DEL_RECEPTOR_DEL_EMAIL",
		"email":"CORREO_DEL_RECEPTOR",	
	}],
	"subject":"ASUNTO_DEL_EMAIL",
	"htmlContent":"<p>Hola esto es una prueba</p>"
}

/*
Aqui verificamos si nos ha adjuntado algo.
Si nos los han adjuntado, agregamos el objeto 'attachment'
al objeto principal, si no es así, dejamos el objeto tal cual.

*/
const path = theMainWindow.fileDialogGetOpenFileName();
if (path)	
{
	obj.attachment = [];
	var fi = new VFile(path);
	
	if (fi.open(VFile.OpenModeReadOnly))
	{
		var b = fi.readAll();
		var base64 = b.toBase64().toLatin1String();
		
		obj.attachment.push({
			content:base64,
			name:"feTrigger.txt"
		});	
	}
}

// Creamos la clase Request para el servicio y adjuntamos los headers
var xhr = new XMLHttpRequest();
var url = "https://api.sendinblue.com/v3/smtp/email";
xhr.open("POST",url,false);
xhr.setRequestHeader("Accept","application/json");
xhr.setRequestHeader("Content-Type","application/json");


// Aquí pondriamos nuestra API KEY
xhr.setRequestHeader("api-key","1234567890SCMKOVMFMVF");


//Esperamos a que termine la función y pintamos la respuesta
xhr.onreadystatechange = function()
{
	if (xhr.readyState === 4)
	{
		alert(xhr.status);
		alert(xhr.responseText);
		
	}
	
}
// ENVIAMOS LOS DATOS A LA PETICIÓN
xhr.send(JSON.stringify(obj));

Adjunto tambíen un PDF con el mismo
sendinblue.pdf (19,1 KB)

2 Me gusta

Estupendo, muchas gracias.
¿Tienes pensado compartir el .vin también?
Gracias de nuevo por igual de todas formas.

1 me gusta

Hola fran_garcía, estaba probando como integrar MailJet con js y estaba muy perdido, gracias pro arrojar algo de luz sobre el correo transicional

Buenas
Pues la verdad no lo tenía pensando, ya que en el video enseño la forma de construir el objeto y a hacer la petición al servicio para enviar un email. De todas formas si quereis el VIN, puedo adjuntarlo, aunque es solo una acción que ejecuta un proceso javascript

Buenas tardes.

Una pregunta, a la hora de pasarle las claves API en un fichero, simplemente es un archivo de texto plano, con la clave, ¿no? Espero que no necesite ningún “formateado” especial…

Respecto a lo del VIN, diría que más que el VIN lo que más ayudaría es el script.js

Muchas gracias otra vez por la ayuda,

Atte.
Un novatillo con javascript.

Buenas

Ya he modificado el post y he dejado los códigos.

Respecto a la pregunta del api-key, no hace falta tenerlas en un fichero de texto, simplemente es un método de autenticación que se pone en el header, en el ejemplo del código, verás que he puesto un ejemplo de api_key, solo tienes que sustituir la que hay en el ejemplo, por la que te hayan proporcionado. Ahí ya lo tendrías

Buen aporte.

Pregunta de novato, al programar en Javascrip, puede funcionar en un dispositivo Androide, para poder enviar los correos?

Gracias.

Luis

Hola Luis.

No hay problema. Velneo es multiplataforma siempre y cuando se programe sin que se haga uso de temas exclusivos de un determinado sistema operativo.

El acceso a API Rest, ya sea de correo o de otro tipo, será multiplataforma si usas la clase XMLHttpRequiest del API.

Saludos
Paco Satué

Buenas,

Como te comentan por arriba, si es posible usarlo debido a la multiplataforma, pero cabe destacar que velneo solo funciona con el motor de JavaScript integrado en QML, es decir la versión de EcmaScript 262 soportando las funciones que soporte el motor de Qt http://doc.qt.io/qt-5/qtqml-javascript-functionlist.html. Destacar también que no soportan las funciones del DOM ni BOM. El motor está un poco desfasado frente a lo que se puede hacer con JavaScript a dia de hoy

Hola fran_garcia.

Aclarar algunos conceptos sobre el tema de javascript en Velneo, que veo hay algo de confusión.

  • En Velneo disponemos de un Modelo de Objetos que llamamos API de Velneo.

  • El API de Velneo se programa usando lenguajes externos, que en el caso de Velneo pueden ser javascript y QML, en un momento se dijo que también estaría Phyton, pero lamentablemente se quedó en el tintero.

  • Cuando hablamos de DOM y BOM (Browser Object Model) nos referimos a los Modelos de Objetos que nos permiten acceder a los objetos de un explorador web y al documento HTML que está cargado en ese momento. O sea, algo que no tiene nada que ver con Velneo nativo.

  • QML accede al API de Velneo usando también el lenguaje javascript.

  • Como javascript es un lenguaje externo a Velneo, es necesario tener incrustado un motor de ejecución de los scripts escritos en VDevelop. En la versión 31 disponemos de 2 motores, uno para los scripts de procesos y fórmulas nativas (QJScript) y otro para el comando nativo Ejecutar script y para QML (QJSEngine).

    Disponemos en la versión 31 de opciones Beta que podemos activar, entre ellas probar el futuro motor javascript de QML EcmaScript7 ( Clave: jsEngine)

  • El nuevo motor EcmaScript7 tiene un gran handicap, no hay posibilidad de usar el Depurador, … ¡¡cosas de Qt!!.

En resumen, la versión 32 vendrá seguramente con el nuevo motor de javascript, con todas la opciones avanzadas de EcmaScript7.

En la aplicación 0PS_TestCodigo de Ejercicios con Velneo podéis practicar con las nuevas funciones del nuevo javascript disponible con Velneo.

Saludos
Paco Satué

Buenas paco, ante todo gracias por la explicación y las aclaraciones que has dado.

Con todo el respeto del mundo, yo con esta plataforma, llevo trabajando con ella 6 meses (recíen salido del grado) y me parece que es una idea totalmente diferente a como va la programación de hoy en dia (en cuanto a estandares me refiero, no que a la herramienta esté mal) es un concepto de herramienta en el que hay que hacer muchos cambios de chips, puede que no sepa valorar o usar todas las funciones o facilidades que aporta la plataforma, por que al final, yo la he usado como base de datos con vModApache y procesos Web, para desarrollar aplicaciones móviles y aplicaciones web mediante frameworks de JavaScript tan usados a dia de hoy.

En Velneo disponemos de un Modelo de Objetos que llamamos API de Velneo.

  • Supongo que te refieres a la Api de Javascript que usa velneo con sus clase y métodos custom como por ejemplo: acceder a tablas y demás. Osea, todo el repertorio de clases que son exclusivas de velneo.

Cuando hablamos de DOM y BOM (Browser Object Model) nos referimos a los Modelos de Objetos que nos permiten acceder a los objetos de un explorador web y al documento HTML que está cargado en ese momento. O sea, algo que no tiene nada que ver con Velneo nativo.

  • Eso ha quedado entendido al 100% por que en velneo aparte del visor, nada va a usar HTML, esas funciones son usables, dentro del propio visor, que me parece perfecto, pero si que podrían orientarse en estás para mejorar la efectividad de trabajar junto con el visor HTML y Velneo.

QML accede al API de Velneo usando también el lenguaje javascript.

  • Este punto queda clarisimo ya si que si trabaja desde C++ con la librería de Qt, tambien se puede usar código javascript

Como javascript es un lenguaje externo a Velneo, es necesario tener incrustado un motor de ejecución de los scripts escritos en VDevelop. En la versión 31 disponemos de 2 motores, uno para los scripts de procesos y fórmulas nativas (QJScript) y otro para el comando nativo Ejecutar script y para QML (QJSEngine).

  • Esto tambíen queda claro, nada que objetar de hecho la propia documentación informa de esto, aunque, QJSEngine soporta funciones mas nuevas dentro de JavaScript

El API de Velneo se programa usando lenguajes externos, que en el caso de Velneo pueden ser javascript y QML, en un momento se dijo que también estaría Phyton, pero lamentablemente se quedó en el tintero.

El nuevo motor EcmaScript7 tiene un gran handicap, no hay posibilidad de usar el Depurador, … ¡¡cosas de Qt!!.

Dejé estos dos puntos al final, por que sinceramente creo que esto viene por temás de beneficios de la propia empresa, es decir, yo que trabajo con el apartado WEB (Quiero dejar claro que alomejor patino en esto, pero si me equivoco espero que se me entienda), estoy obligado a usar vModApache para poder exponer mis soluciones via web, este caso en forma de Interfaz REST y ese vModApache conlleva un gasto en forma de 2 opciones hasta donde sé.

  • Tener un servidor propio con Velneo, instalar modApache y dejar que te consuma 2 enganches por solución(Los enganches se pagan, es como si fueran 2 vClients conectados) y para que funcione correctamente y atienda unas peticiones considerables, se deben dejar los Workers que se llaman en apache como mínimo en 2.

  • Pagar un servidor cloud más aparte el gasto mensual que conlleva el vModApache, sin contar que tengas un servidor con licencias ilimitadas, por que si no, te durará según los enganches que tengas.

Yo he trabajado con lenguajes Backend y todos te permiten montar tu propio servidor de aplicación, en especial Python. Es igual que por que no hay una api de C++ para velneo al igual que con JavaScript, por que hasta donde sé Velneo está hecho con C++ y eso se podría integrar facil y permitiría incluir muchas funciones que por ahora Velneo no es capaz de hacer.

Sobre el motor de JavaScript el que comentas en la versión EcmaScript7, se refiere al motor ES7, que se implementó en los navegadores en la versión de 2017. Podrían poner el motor de NodeJS(creo que es el V8 que diseño google) que permite ejecutar y compilar al igual que C++ a código nativo, en este caso ejecutar JavaScript fuera del navegador, pero claro, eso daría ciertas libertades, que he comentado antes, que parece que no gustan.

Se que se puede transferir datos mediante TCP, pero lo veo muy engorroso comparado con otros sistemas y la documentación no es que ayude mucho, no se muy bien como transfiere los datos.

Perdón por el rollo, no me quejo de la plataforma, de hecho me parece interesante y como digo no se mucho más aparte de su backend, pero noto que hay cierto margen de mejora, para suplir ciertas carencias ,que aveces uno piensa que esto no es life is soft.

Saludos.

Hola Fran,

He copiado el Javascript y me da un error en la línea correspondiente a let obj =
en concreto Error en script: Expected ; ' ,; ’

Saludos

Buenas Carlos

He actualizado el post con el archivo .vin, que se me pasó subirlo.

Solo hace falta que en el script rellenes el objeto con tus parámetros

Saludos

vSendinBlue.vin (2,0 KB)

Comparto la solución aquí que no me deja editar el mensaje principal.

Saludos.

Mil gracias Fran ¡¡¡¡

Saludos cordiales

Carlos

Hola Fran, he probado el vin y funciona muy bien, pero casi no se mucho de javascript me gustaría solo saber como cambiar el js. en donde tienes el let obj. por variables para que sea dinámico. en la parte de attachments ese ya lo pude modificar para que no tengan que seleccionar la senda pero igual quisiera que fuera una variable.

Gracias por tu aporte.

Hola Fran,

¿Es posible que en el nuevo entorno Brevo el script no funcione?
¿La linea que habria que modificar es esta?
var url = “https://api.sendinblue.com/v3/smtp/email”;

Muchas gracias

Saludos.

Carlos.

Buenas

Para todos los que tengan problemas, ahora la url de endpoint es esta: https://api.brevo.com/v3/smtp/email

con lo que ahora en el código la url, será del siguiente modo:

var url = "https://api.brevo.com/v3/smtp/email";

Saludos

Mil gracias de nuevo Fran !!!

Saludos

Buenas tardes.
Veo que utilizan una API para enviar correo electrónicos.
Quisiera presentarles un código en NodeJS, con el cual poder tener en local y poder enviar los correos de forma gratuita las veces que quieran.

Espero les sea de utilidad.

Saludos

#########################################################

const express = require(‘express’);
const nodemailer = require(‘nodemailer’);

const app = express();
const port = 3001;

app.use(express.json());

// Función para enviar correos electrónicos
const enviarCorreo = async (destinatario, asunto, mensaje) => {
try {
// Configurar el transporte de correo electrónico
const transporter = nodemailer.createTransport({
// Configuración del servidor de correo saliente (SMTP)
host: ‘mail.xxxxxxxxxx.com.py’,
port: 465,
secure: true,
auth: {
user: ‘carlosfigari@xxxxxxxxxx.com.py’,
pass: ‘xxx-*++xx-xxxxx’,
},
});

// Configurar el contenido del correo electrónico
const mailOptions = {
  from: 'carlosfigari@xxxxxxxxxx.com.py',
  to: destinatario,
  subject: asunto,
  html: mensaje,
};

// Enviar el correo electrónico
await transporter.sendMail(mailOptions);

console.log('Correo electrónico enviado a', destinatario);
return { success: true, message: 'Correo electrónico enviado correctamente' };

} catch (error) {
console.error(‘Error al enviar el correo electrónico:’, error);
throw error; // Reenviar el error para manejo posterior
}
};

// Ruta para enviar correos electrónicos
app.post(‘/enviar-email’, async (req, res) => {
try {
// Obtener los datos del cuerpo de la solicitud
const { destinatario, asunto, mensaje } = req.body;

// Enviar el correo electrónico
const resultado = await enviarCorreo(destinatario, asunto, mensaje);

res.status(200).json(resultado); // Devolver un JSON como respuesta

} catch (error) {
res.status(500).json({ success: false, message: ‘Error al enviar el correo electrónico’ });
}
});

// Manejo de errores global
app.use((err, req, res, next) => {
console.error(‘Error inesperado:’, err);
res.status(500).json({ success: false, message: ‘Error inesperado en el servidor’ });
});

// Iniciar el servidor
app.listen(port, () => {
console.log(Servidor en ejecución en http://localhost:${port});
});

#########################################################

Tienen que tener un archivo llamado datos.json con los siguiente datos:
{
“destinatario”: “figaricarlos@hotmail.com”,
“asunto”: “Asunto del correo, HTML”,
“mensaje”: " html El mensaje puede ser en formato b HTML/b /html"
}

El JSON debe estar en la misma carpeta que el JS.

#########################################################

La url de ejecución del envió del correo es el siguiente:

curl -X POST -H “Content-Type: application/json” -d @datos.json http://localhost:3001/enviar-email

Obviamente pueden utilizar desde Velneo directamente… Actualmente lo uso en modo prueba y funciona muy bien. Tarda en 5 a 7 segundo en enviar cada correo.