2010-11-22 5 views
8

Djangoとpython-icalendarを使用してiCalendarファイルを生成していますが、それらはOutlook(2010)で会議出席依頼として正しく表示されます。 Gmail(Google Apps)では空白のメールが表示されます。どうしたんだ?ここに私の.icsファイルの一つは次のようになります。Gmail/Google Appsと正しく統合するためのミーティングの招待状を受け取るにはどうすればよいですか?

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 

ああ、私はそうのように、ICSのコンテンツを添付するDjangoのEmailMultiAlternativesを使用しています:

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

関連[投稿](http://stackoverflow.com/questions/4397938/attaching-anical-file-to-a-django-email)を参照してください。その解決策は、 "代替"の代わりに "添付ファイル"を使用し、Google上で動作するように見えます。 –

+0

@equinoxelですが、これは、「代替」の代わりに「添付」を使用したり、「icalendar」の代わりに「vobject」を使用しているためです。私はPlone集団が[icalendar](http://pypi.python.org/pypi/icalendar)の開発を取り上げたのは本当に好きです。私はいつも、そのAPIが、vobjectが形成するRFCの周りの薄い層よりも好きでした。 –

答えて

0

私は周りにプレイしていました。昔のicsファイルには、django-calというちょっとしたヘルパーアプリが登場しました。

それはもはや積極的な開発ではありませんが、まだ少数の人々の必要性を満たすようです。パッチや改善が大歓迎です!その後、

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

そして:

1

これは少し遅れてかもしれませんが、ここに私のモデルにおけるヘルパー関数としての私の実装である(それは自身のプロパティとして日付が含まれている「イベント」モデルです)電子メールを送信機能では、私が持っている:

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

(文字通り)メッセージの代替バージョンを添付すること)ソリューションは、(私はvobjectすることを好むもの)iCalendar形式を使用し、それはまた、(attach_alternativeを使用していること。メールクライアントがレンダリングするメッセージのバージョンに関係なく、attach()関数はカレンダーファイルを投げるために使用されています(「.ics」拡張子を付けました)。

私はあなたがpython-icalendarを使用していることを認識していますが、attach()メソッドは引き続き同じように動作するはずです。私はちょうどiCalファイルを生成するための代替実装を示すことにしました。

+0

あなたのコードは素晴らしい動作します。しかし、Outlookはこのicsファイルをカレンダーとして認識しません。何が欠けている? –

関連する問題