我正在尝试.ics通过 SendGrid (从节点服务器)发送日历邀请,以便它在 Outlook 或 Gmail 等客户端中呈现为实际邀请(带有接受/拒绝按钮),而不仅仅是作为附件文件。
我花了几天时间研究这个问题(数十个 Stackoverflow 问题、RFC -5545、RFC-2446、iCalendar规范摘录、Sendgrid 的 GitHub 问题线程:1、2、3 、 SendGrid文档、源等)。
然而,似乎没有答案(或者我错过了什么?)。
到目前为止我发现Content-Type附件在这里非常重要,尤其是method=REQUEST部分。甚至文件中属性的顺序也会有所不同。
尽管这里有很多关于 SO 的问题,但由于某种原因,大多数问题仍然没有得到解答。
这是我设置attachment对象的方法:
const SendGrid = require("@sendgrid/mail");
const attachment = {
filename: 'invite.ics',
name: 'invite.ics',
content: Buffer.from(data).toString('base64'),
disposition: 'attachment',
contentId: uuid(),
type: 'application/ics'
};
SendGrid.send({
attachments: [attachment],
templateId,
from: {
email: config.emailSender,
name: config.emailName,
},
to: user.email,
dynamicTemplateData: {
...rest,
user,
}, …Run Code Online (Sandbox Code Playgroud)