Как я могу получить приглашение на встречу для правильной интеграции с Gmail / Службами Google? - PullRequest
8 голосов
/ 23 ноября 2010

Я создаю файлы 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:rich@example.com
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:events@example.com
SEQUENCE:1
SUMMARY:Conference call about GLD
UID:example.com.20
END:VEVENT
END:VCALENDAR

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

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

Ответы [ 2 ]

2 голосов
/ 06 марта 2013

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

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.

0 голосов
/ 23 июля 2012

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

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

...