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).

Другие вопросы по тегам