如何使用nodemailer正确发送会议请求?

我正在尝试使用下面的代码发送使用nodemailer的会议请求。 我面临的问题是,会议邀请将作为附件ics文件,而不是请求,可以直接添加。 我已经在多个邮件客户端上尝试过了。 任何指针将不胜感激。

transport.sendMail({ from: 'BakBak.io <biplav.saraf@gmail.com>', to: 'biplav.saraf@gmail.com', subject: 'Meeting', //html: "Hi", text: "Hola!!", alternative: { contentType: "text/calendar; method=REQUEST; name='meeting.ics';component=VEVENT", contents: new Buffer(cal.toString()), contentEncoding:"7bit", "Content-Class":"urn:content-classes:calendarmessage" }, headers: { "Content-Type": "text/calendar", //"charset":"utf-8", "method":"REQUEST", "component":"VEVENT", "Content-Class":"urn:content-classes:calendarmessage" }//, //attachments : [{filename:'invite.ics',contents: cal.toString()}] }, function(err, responseStatus) { if (err) { console.log(err); res.render('schedule',{errors: err.message}); } else { console.log(responseStatus.message); res.render('schedule',{success_msg: "Successfully Created!"}); } }); 

Gmail不显示会议请求,如果发件人和收件人相同,则可以select添加到日历。

这对我来说是有效的:

 transport.sendMail({ from: 'BakBak.io <biplav.saraf@gmail.com>', to: 'donateoldspectacles@gmail.com', subject: 'Meeting', html: "Hiya!!", text: "Hola!!", alternatives: [{ contentType: "text/calendar", content: new Buffer(ical) }] }, function(err, responseStatus) { if (err) { console.log(err); res.render('schedule',{errors: err.message}); } else { console.log(responseStatus.message); res.render('schedule',{success_msg: "Successfully Created!"}); } }); 

我认为问题在这里: "Content-Type": "text/calendar"如果你想简单地添加内容作为纯文本或HTML,用户可以单击电子邮件中的链接添加它,那么你可能想要使用textHTML标头。 您可以简单地将链接发送到Google日历,例如用户只需点击并join活动即可。

"Content-Type": "text/calendar"使邮件发件人/客户相信有一个实际的文件附加或与电子邮件相关联。

Update:

附加的ICS文件必须附加邮件客户端不能告诉它是一个事件,你只需要使用正确的标题。 例如:

 Content-Type: text/calendar; method=REQUEST Content-Transfer-Encoding: Base64 Content-Disposition: attachment; filename=iCal-20140610-083450.ics 

附加.ics文件。 邮件客户端将足够聪明,找出它,并提供一个选项,如果点击添加到本地日历。

有一些邮件客户端,比如AirMail ,可以自动检测文本中的任何date,不需要附件,并且允许用户将事件直接集成到本地日历中,但是这个function并没有被广泛使用。