Saltar al contenido

¿Es posible crear una convocatoria de reunión para Outlook con nodeJS?

Solución:

Para aquellos que aún buscan una respuesta, así es como logré obtener la solución perfecta para mí. Usé iCalToolkit para crear un objeto de calendario.

Es importante asegurarse de que todos los campos relevantes estén configurados (organizador y asistentes con RSVP).

Inicialmente, estaba usando el servicio Postmark API para enviar mis correos electrónicos, pero esta solución solo funcionaba enviando un archivo adjunto ics.file.

Cambié al servicio Postmark SMTP donde puede incrustar los datos de iCal dentro del mensaje y para eso usé nodemailer.

Esto es lo que parece :

        var icalToolkit = require('ical-toolkit');
        var postmark = require('postmark');
        var client = new postmark.Client('xxxxxxxKeyxxxxxxxxxxxx');
        var nodemailer = require('nodemailer');
        var smtpTransport = require('nodemailer-smtp-transport');

        //Create a iCal object
        var builder = icalToolkit.createIcsFileBuilder();
        builder.method = meeting.method;
        //Add the event data

        var icsFileContent = builder.toString();
        var smtpOptions = {
            host:'smtp.postmarkapp.com',
            port: 2525,
            secureConnection: true,
            auth:{
               user:'xxxxxxxKeyxxxxxxxxxxxx',
               pass:'xxxxxxxPassxxxxxxxxxxx'
            }
        };

        var transporter = nodemailer.createTransport(smtpTransport(smtpOptions));

        var mailOptions = {
            from: '[email protected]',
            to: meeting.events[0].attendees[i].email,
            subject: 'Meeting to attend',
            html: "Anything here",
            text: "Anything here",
            alternatives: [{
              contentType: 'text/calendar; charset="utf-8"; method=REQUEST',
              content: icsFileContent.toString()
            }]
        };

        //send mail with defined transport object 
        transporter.sendMail(mailOptions, function(error, info){
            if(error){
                console.log(error);
            }
            else{
                console.log('Message sent: ' + info.response);  
            }
        });

Esto envía una solicitud de reunión real con el botón Aceptar, rechazar y Rechazar.

Es realmente increíble la cantidad de trabajo que necesita para realizar una funcionalidad tan trivial y cómo todo esto no está bien documentado. Espero que esto ayude.

Si no desea utilizar el enfoque de servidor smtp en una solución aceptada anteriormente, tiene disponible una solución enfocada en Exchange. ¿Qué está mal en la respuesta aceptada actual? no crea una reunión en el calendario del remitente, usted no es propietario del elemento de la reunión para que el remitente Outlook / OWA lo modifique más.

aquí está el fragmento de código en javascript usando el paquete npm ews-javascript-api

var ews = require("ews-javascript-api");
var credentials = require("../credentials");
ews.EwsLogging.DebugLogEnabled = false;

var exch = new ews.ExchangeService(ews.ExchangeVersion.Exchange2013);

exch.Credentials = new ews.ExchangeCredentials(credentials.userName, credentials.password);

exch.Url = new ews.Uri("https://outlook.office365.com/Ews/Exchange.asmx");

var appointment = new ews.Appointment(exch);

appointment.Subject = "Dentist Appointment";
appointment.Body = new ews.TextBody("The appointment is with Dr. Smith.");
appointment.Start = new ews.DateTime("20170502T130000");
appointment.End = appointment.Start.Add(1, "h");
appointment.Location = "Conf Room";
appointment.RequiredAttendees.Add("[email protected]");
appointment.RequiredAttendees.Add("[email protected]");
appointment.OptionalAttendees.Add("[email protected]");

appointment.Save(ews.SendInvitationsMode.SendToAllAndSaveCopy).then(function () {
    console.log("done - check email");
}, function (error) {
    console.log(error);
});
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *