У меня проблема с обработкой ответов от отправленных iCal-приглашений.У меня есть узел JS-Backend, который отправляет приглашения на собрание в список участников, используя nodemailer и ical-generator .(Код ниже)
Что я обычно делаю:
- Создание iCal с посетителями
- Настройка органайзера
- Отправка всем участниками органайзер (скрытая копия) с методом REQUEST
Теперь я хотел бы предоставить посетителю опцию rsvp, поэтому я установил для этого значения значение true.Теперь, когда участник отвечает «ПРИНЯТ | ТЕНТАТИВНЫЙ | ОТМЕНЕН», учетная запись организатора электронной почты получает ответ, но соответствующая запись iCal вообще не обновляется.
Швы Outlook не могут связать ответ сческих-Entry.Это определенно имеет смысл, потому что iCal был создан не учетной записью организаторов, а самим сервером.
Итак, мой вопрос: есть ли возможность отправить iCal-запись с сервера участникам и организатору, а затем получить ответы от участников с обновлением записи календаря в календаре организаторов?
Я попробовал несколько вещей, играя с UID iCal-Entry, методы переключения (REQUEST, PUBLISH и т. Д.), Но ничего не помогло.
Любые треки в Outlook, которые могли бы дать некоторыевход?Возможно, используя Sharepoint-Calendar или похожий подход?
Действительно застрял на этом и благодарен за любые подсказки.
Кодовые рецепты
Код для созданияiCal-Entry:
createIcal(calTitle, startDate, endDate, esTitle, esDescription, method, attendees) {
let cal = icalGenerator({
domain: 'test.de',
name: calTitle,
timezone: 'Europe/Berlin',
method: method
});
startDate = new Date(startDate);
endDate = new Date(endDate);
cal.prodId({
company: 'Test AG',
product: 'Test product',
language: 'DE'
});
let formattedAttendees = [];
if (attendees) {
for (let attendee of attendees) {
formattedAttendees.push({
email: attendee.email,
rsvp: true,
status: 'accepted',
type: 'individual',
role: (attendee.email === 'organizer@email.de' ? 'chair':'req-participant')
});
}
}
let ev = cal.createEvent({
start: startDate,
end: endDate,
summary: esTitle,
description: esDescription,
location: 'somewhere',
url: 'https://test.de',
organizer: {
name: 'organizer@email.de',
email: 'organizer@email.de',
mailto: 'organizer@email.de'
},
attendees: formattedAttendees
});
return cal.toString();
}
Код для отправки электронного письма с ics:
async sendmail(receivers, subject, html, iCal, iCalMethod) {
html = '<html><body>' + html;
html += '</body></html>';
let plainText = EmailTemplate.getPlainTextFromHTML(html);
let smtpOptions = {
name: 'test.de',
host: 'mx.test.de',
port: 587,
pool: true,
auth: {
user: 'test',
pass: 'test'
},
secure: false,
tls: {
rejectUnauthorized: false
}
};
let transporter = nodemailer.createTransport(smtpOptions);
let mailOptions = {
from: 'admin@test.com',
bcc: receivers,
subject: subject,
html: html,
text: plainText
};
if (iCal) {
/*mailOptions.alternatives = [{
contentType: 'text/calendar; charset="utf-8"; method=' + iCalMethod,
content: iCal
}]*/
mailOptions.icalEvent = {
filename: 'test.ics',
method: iCalMethod,
content: iCal
}
}
// verify connection configuration
transporter.verify(function (error, success) {
if (error) {
console.log(error);
} else {
console.log("Server is ready to take our messages");
}
});
if (receivers.length > 0) {
transporter.sendMail(mailOptions, function (error, info) {
if (error) {
console.log(error);
} else {
console.log('Email sent: ' + info.response);
}
});
}
}