Как я могу получить приглашение на встречу для правильной интеграции с Gmail / Google Apps?

Я создаю файлы iCalendar с помощью Django и python-icalendar, и они правильно отображаются в Outlook (2010) как приглашения на собрания. В Gmail (Google Apps) я просто вижу пустое письмо. В чем дело? Вот как выглядит один из моих файлов .ics:

BEGIN:VCALENDAR
METHOD:REQUEST
PRODID:-//My Events App//example.com//
VERSION:2.0
BEGIN:VEVENT
ATTENDEE;CN=Richard;ROLE=REQ-PARTICIPANT;RSVP=TRUE:MAILTO:[email protected]
CREATED;VALUE=DATE:20101122T183813
DESCRIPTION:Phone number: (212)-123-4567\n\nThis is a test description
 for the conference call.
DTEND;VALUE=DATE:20101127T131802Z
DTSTAMP;VALUE=DATE:20101127T121802Z
DTSTART;VALUE=DATE:20101127T121802Z
LAST-MODIFIED;VALUE=DATE:20101122T183813
ORGANIZER;CN=Example.com:[email protected]
SEQUENCE:1
SUMMARY:Conference call about GLD
UID:example.com.20
END:VEVENT
END:VCALENDAR

О, и я использую Django EmailMultiAlternatives для прикрепления содержимого ics, например:

if calendar:
    message.attach_alternative(calendar.as_string(), "text/calendar; method=REQUEST; charset=\"UTF-8\"")
    message.content_subtype = 'calendar'

person rfrankel    schedule 22.11.2010    source источник
comment
См. Соответствующее сообщение. Это решение использует вложение вместо альтернативы и похоже, что оно работает в Google.   -  person Laur Ivan    schedule 10.03.2011
comment
@equinoxel, но это из-за использования вложения вместо альтернативы или использования vobject вместо icalendar. Мне очень нравится, что коллектив Plone занялся разработкой icalendar. Мне всегда нравился его API больше, чем тот тонкий слой вокруг RFC, который формирует vobject.   -  person Chris Wesseling    schedule 11.09.2012


Ответы (2)


Это может быть немного поздно, но вот моя реализация в качестве вспомогательной функции в моей модели (это «событийная» модель, которая содержит дату как собственное свойство):

from icalendar import Calendar, Event as ICalEvent
...
class Event(models.Model):
...
    def generate_calendar(self):
        cal = Calendar()
        site = Site.objects.get_current()

        cal.add('prodid', '-//{0} Events Calendar//{1}//'.format(site.name,
                                                                 site.domain))
        cal.add('version', '2.0')

        ical_event = ICalEvent()
        ical_event.add('summary', self.title)
        ical_event.add('dtstart', self.start_date)
        ical_event.add('dtend', self.end_date)
        ical_event.add('dtstamp', self.end_date)
        ical_event['uid'] = str(self.id)

        cal.add_component(ical_event)
        return cal.to_ical()

А затем в функции, которая отправляет электронное письмо, у меня есть:

# This one has the plain text version of the message
msg = EmailMultiAlternatives('Event Confirmation', text_email,
                             FROM_EMAIL, [self.user.email])
# This one has the HTML version of the message
msg.attach_alternative(html_email, 'text/html')
# Now to attach the calendar
msg.attach("{0}.ics".format(self.event.slug),
           self.event.generate_calendar(), 'text/calendar')
msg.send(fail_silently=True)

Это решение использует icalendar (который я предпочитаю vobject), а также использует attach_alternative () для прикрепления (буквально) альтернативной версии сообщения. Функция attach () используется для добавления файла календаря, независимо от версии сообщения, которое почтовый клиент выбирает для отображения (обратите внимание, что я также дал ему расширение «.ics»).

Я понимаю, что вы используете python-icalendar, но метод attach () должен работать примерно так же. Я просто решил также показать вам альтернативную реализацию создания файлов iCal.

person JoeLinux    schedule 06.03.2013
comment
Ваш код отлично работает. Но Outlook не распознает этот ICS-файл как календарь. Чего не хватает? - person Ronaldo Bahia; 23.01.2017
comment
@RonaldoBahia, вы нашли решение? - person Shahriar Rahman Zahin; 23.02.2021
comment
@ShahriarRahmanZahin Outlook web (hotmail) работает нормально. Не пробовал на рабочем столе Outlook. - person Ronaldo Bahia; 15.03.2021

Давным-давно мне пришлось поиграть с файлами .ics, и я придумал небольшое вспомогательное приложение под названием django-cal, что упрощает весь процесс.

Он больше не находится в активной разработке, но, похоже, все еще удовлетворяет потребности некоторых людей. Патчи и улучшения приветствуются!

person Maik Hoepfel    schedule 23.07.2012