是否可以使用nodeJS创建Outlook的会议请求?

von*_*olf 6 javascript email outlook calendar node.js

我正在使用Angular和Node开发一个非常基本的日历,但我没有找到任何代码.

工作流程如下:创建事件,输入收件人的电子邮件地址,验证事件.这会触发发送给收件人的电子邮件.邮件应采用Outlook会议请求格式(不是附加对象).

这意味着当在Outlook中收到会议时,会议将自动添加到日历中.

这可能吗?如果是,只有节点端的javascript可能吗?

von*_*olf 7

对于那些仍在寻找答案的人来说,这就是我如何设法为我找到完美的解决方案.我使用iCalToolkit创建了一个日历对象.

确保设置所有相关字段(组织者和RSVP参加者)非常重要.

最初我使用Postmark API服务发送我的电子邮件,但此解决方案仅通过发送ics.file附件来工作.

我切换到邮戳SMTP服务,您可以在邮件中嵌入iCal数据,为此我使用了nodemailer.

这就是它的样子:

        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: 'message@domain.com',
            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);  
            }
        });
Run Code Online (Sandbox Code Playgroud)

这会使用"接受","拒绝"和"拒绝"按钮发送真实会议请求.

对于这样一个简单的功能而言,您需要完成的工作量是多么令人难以置信,以及所有这些都没有得到很好的记录.希望这可以帮助.


Gau*_*ngh 5

如果您不想在早期接受的解决方案中使用 smtp 服务器方法,您可以使用以 Exchange 为重点的解决方案。当前接受的答案有什么问题?它不会在发件人的日历中创建会议,您没有会议项目的所有权以供发件人 Outlook/OWA 进一步修改。

这是使用 npm 包的 javascript 代码片段 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("user1@constoso.com");
appointment.RequiredAttendees.Add("user2@constoso.com");
appointment.OptionalAttendees.Add("user3@constoso.com");

appointment.Save(ews.SendInvitationsMode.SendToAllAndSaveCopy).then(function () {
    console.log("done - check email");
}, function (error) {
    console.log(error);
});
Run Code Online (Sandbox Code Playgroud)