Mailgun: отправить событие календарного собрания / запрос
У меня проблема с отправкой события календаря, которое распознается почтовым приложением Outlook и iOS как событие календаря, а не обычная электронная почта.
Я использую JavaScript в node.js env. Для отправки электронной почты я использую mailgun и js library mailgun-js
, Я создаю файл ics и прикрепляю его к электронному письму.
const mailgun = require('mailgun-js')({apiKey: mailgunApiKey, domain: mailgunDomain})
const candidateEmailBody = {
from: `${companyName} <${EMAIL_FROM}>`,
to: email,
subject: companyName + ' - interview',
html: 'Html message',
attachment: [invite]
}
mailgun.messages().send(candidateEmailBody, function (error, body) {
if (error) {
console.log(error)
}
})
invite
объект создан ics
lib и завернут в прикрепление к почтовому оружию с помощью функции ниже:
const prepareIcsInvite = function (startDate, companyName, firstname, lastname, email, intFirstname, intLastname, intEmail) {
const st = new Date(startDate)
const meetingEvent = {
start: [st.getFullYear(), st.getMonth() + 1, st.getDate(), st.getHours(), st.getMinutes()],
end: [st.getFullYear(), st.getMonth() + 1, st.getDate(), st.getHours()+1, st.getMinutes()],
title: companyName + ' - Interview',
description: 'description',
location: 'location',
status: 'CONFIRMED',
productId: 'myproduct',
organizer: {name: 'Admin', email: 'admin@example.com'},
attendees: [
{name: firstname + ' ' + lastname, email: email},
{name: intFirstname + ' ' + intLastname, email: intEmail}
]
}
const icsFile = ics.createEvent(meetingEvent)
const fileData = new Buffer(icsFile.value)
const invite = new mailgun.Attachment(
{
data: fileData,
filename: 'Meeting Invite.ics',
contentType: 'text/calendar'
})
console.log('ICS meeting invite created')
return invite
}
Подготовленная таким образом электронная почта отправляется через API почтового пистолета, и GMail правильно распознает ее как приглашение на встречу:
Однако другие почтовые клиенты (iOS, Outlook) не распознают, что это приглашение на событие календаря, и просто отображают его как обычную электронную почту с вложенным файлом.
Что я должен сделать, чтобы сделать это сообщение совместимым с Outlook и iOS?
1 ответ
Outlook (и я считаю, что iOS) также использует "альтернативы" для хранения приглашения.
В этом выпуске GitHub описано, как использовать библиотеку MIME для создания сообщения о событии: https://github.com/bojand/mailgun-js/issues/44. Вы должны иметь возможность использовать тот же поток кода, который описан в этой проблеме, для создания вашего сообщения. Вам нужно будет использовать строковое значение, возвращаемое из ics.createEvent для вызова addAlternative.
Mailcomposer - это библиотека MIME, на которую есть ссылки в документации Mailgun ( https://documentation.mailgun.com/en/latest/api-sending.html).