2015-06-26 96 views
3

我正在開發一個非常基本的日曆與Angular和節點,我還沒有找到任何代碼。是否可以使用nodeJS創建Outlook的會議請求?

工作流程如下:創建事件,輸入收件人的電子郵件地址,驗證事件。 這會觸發發送給收件人的電子郵件。郵件應該處於Outlook會議請求格式(不是附加對象)。

這意味着,當在Outlook中收到會議時,會議將自動添加到日曆中。

這可能嗎?如果是的,只能在Node端使用javascript嗎?

回答

3

對於那些仍在尋找答案了類似的系統的時候,這裏就是我設法獲得我的完美解決方案。 我用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: '[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); 
      } 
     }); 

這將與接受,拒絕和拒絕按鈕,一個真正的會議請求。

這真是令人難以置信的工作量需要通過這樣一個微不足道的功能,以及所有這些都沒有很好的記錄。 希望這有助於。

+0

嘿,我使用快速框架來創建展望日曆,即使當我使用你的功能我得到錯誤作爲會議未定義在行中:builder.method = meeting.method; 可以請你幫我解決這個問題.. –

+0

會議是包含所有日曆事件信息(屬性:方法,事件。內部事件你有開始,結束,組織者,參與者等) – vonwolf

+0

但爲什麼我在那裏得到錯誤? –

0

只要您可以在節點中使用SOAP,並且您還可以使用NTLM身份驗證與Exchange一起使用節點,就應該可以。我相信每個模塊都有。

,我發現這個blog非常有幫助設計使用PHP

+0

謝謝您的回答中的JavaScript代碼段。在我這樣做之前,我會用名爲node-icalendar的插件嘗試我的運氣。 – vonwolf

+0

如果您希望Outlook能夠與訂閱的互聯網日曆一起工作,請準備好失望,我沿着這條道路前進,並且發現Outlook即使在日曆或手動指示的情況下刷新日曆也不是很一致。 –

1

如果您不想在早期接受的解決方案中使用smtp服務器方法,則可以使用Exchange專用解決方案。目前接受的答案有什麼錯誤?它不會在發件人的日曆中創建會議,您不具有會議項目的所有權以供發件人Outlook/OWA進一步修改。

這裏是使用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); 
}); 
+0

接受的解決方案沒有任何錯誤,它只是回答問題的不同方法。問題並不需要擁有所有權,因爲通過作爲「主」的應用程序來管理修改/更新。 – vonwolf

+0

憑證中需要的信息是什麼?它是一個交易賬戶登錄/密碼? – vonwolf

+0

這需要Exchange用戶名和密碼。 我不會進入正確或錯誤的討論,對我來說(有Exchange經驗)發送精心編制的消息具有預約所有權等問題,您不能通過這種方式創建預約後修改預約。 EWS解決了這個問題。很顯然,當這個問題得到解答時,包ews-javascript-api處於非常早期階段,現在可以使用其他方法來解決這些問題。 –

相關問題