von*_*olf 6 javascript email outlook calendar node.js
我正在使用Angular和Node开发一个非常基本的日历,但我没有找到任何代码.
工作流程如下:创建事件,输入收件人的电子邮件地址,验证事件.这会触发发送给收件人的电子邮件.邮件应采用Outlook会议请求格式(不是附加对象).
这意味着当在Outlook中收到会议时,会议将自动添加到日历中.
这可能吗?如果是,只有节点端的javascript可能吗?
对于那些仍在寻找答案的人来说,这就是我如何设法为我找到完美的解决方案.我使用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)
这会使用"接受","拒绝"和"拒绝"按钮发送真实会议请求.
对于这样一个简单的功能而言,您需要完成的工作量是多么令人难以置信,以及所有这些都没有得到很好的记录.希望这可以帮助.
如果您不想在早期接受的解决方案中使用 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)
| 归档时间: |
|
| 查看次数: |
5914 次 |
| 最近记录: |