Я генерирую файлы ICS из приложения PHP и отправляю их по электронной почте в виде вложений (через API SendGrid).
Файл ICS отлично работает с веб-почтой Gmail и с iPhone. Однако IBM Notes не распознает их как приглашения на собрания. Заметки показывает вложение, но не видит его как приглашение на мероприятие.
Вот мой файл ICS:
BEGIN:VCALENDAR
PRODID:-//My Company//v1.1//EN
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:REQUEST
BEGIN:VEVENT
DTSTART:20160127T140000Z
DTEND:20160127T143000Z
DTSTAMP:20160114T213657Z
ORGANIZER;CN=Demo Two:
mailto:[email protected]
UID:e93838a737b3f9ae75056968b22281b2
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=CHAIR;RSVP=FALSE
;CN=Demo Two:mailto:[email protected]
CREATED:20160114T213657Z
DESCRIPTION:another scheduled
LAST-MODIFIED:20160114T213657Z
LOCATION:See email
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:another scheduled
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR
Я пытаюсь отправить один и тот же файл ICS нескольким получателям, поэтому я не включаю строку ATTENDEE для получателя, только для СТУЛА.
Я не могу найти ЛЮБУЮ подробную информацию о том, что Notes требует в своих файлах ICS …
Есть идеи, что не так?
Я диагностировал часть своей проблемы, сравнивая тело письма с приглашением Google Mail (которое работает в Notes). Есть несколько очевидных проблем при прикреплении файла ICMIC через веб-интерфейс SendGrid.
Почта должна включать несколько частей: тело, встроенный текст / объект календаря и вложенный файл .ics.
Outlook и Google пользователь вложенный файл. Я думаю, что Notes использует встроенные данные, так как кажется, что игнорирует вложение .ics.
Я нашел этот связанный вопрос StackOverflow:
Как добавить заголовки в sendgrid?
Итак, я прошел путь построения сообщения в SwiftMailer с соответствующими заголовками сообщений и вложений. Похоже, что пока он работает правильно, но я подтвердлю, когда буду тестировать в Notes.
РЕДАКТИРОВАТЬ: я подтвердил, что делает встроенное приглашение icalendar работает, и что это приглашение теперь появляется в Notes.
Каждый раздел письма должен иметь свой собственный тип MIME. Вот тело сообщения:
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable
<p>Hello,</p>
<p>This is a friendly reminder ...
А вот приглашение icalendar (обратите внимание, что вы не можете прочитать данные iCalendar, потому что они закодированы в base64:
Content-Type: text/calendar; charset=UTF-8; method=PUBLISH; name=invite.ics
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename=invite.ics
QkVHSU46VkNBTEVOREFSDQpQUk9ESUQ6LS8vU3RyaWRlLlRyYWluaW5nLy92
MS4xLy9FTg0KVkVSU0lPTjoyLjANCkNBTFNDQUxFOkdSRUdPUklBTg0KTUVU...
Я получил этот вывод, добавив вложение в SwiftMailer следующим образом:
$attachment = Swift_Attachment::newInstance($ical, 'invite.ics', 'text/calendar');
$attachment->setDisposition('inline');
$attachment->setContentType('text/calendar; charset=UTF-8; method=PUBLISH');
$message->attach ( $attachment );
В приведенном выше фрагменте $ ical является правильно отформатированной строкой iCalendar.
Извините, это уже давно, но найти информацию о том, как это сделать правильно, довольно сложно.
Это может быть одна из двух проблем:
Прежде всего, у вас должен быть посетитель хотя бы для пользователя, которому вы отправляете приглашение.
Если это не сработает, MIME-структура вашей электронной почты может не распознаваться Lotus Notes, и в этом случае вы, вероятно, захотите включить в свой вопрос все сообщение MIME.