2010-12-13 104 views
2

总结是我现在正在实现事件确认系统,并且找不到ICalendar回复的正确格式。因此,我想知道是否有一个完整的REPLY消息的例子,也许是一个可以包装它的PHP库?Icalendar事件是否存在标准和实现RSVP

现在了解详情,我们会收到外部电子邮件,其中包括要求参加活动邀请的RSVP。这里是的iCal文件的摘录:

ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN="'[email protected]'":MAILTO:[email protected] ORGANIZER;CN="Organ Izer":MAILTO:[email protected]

我找不到回复标准的RSVP发送给主办方。 RFC 2447提到“ATTSTAT”和“PARTSTAT”参数。

通过尝试将以下消息发送给Google日历,事件未被更新。

$headers = "Content-Type:text/calendar; Content-Disposition: inline; charset=utf-8;\r\n"; 
$headers .= "Content-Type: text/plain;charset=\"utf-8\"\r\n"; 
$headers .= 'BEGIN:VCALENDAR 
VERSION:2.0 
METHOD:REPLY 
BEGIN:VEVENT 
ORGANIZER;CN=JCharles:mailto:[email protected] 
UID:[email protected] 
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=CONFIRMED;RSVP= 
TRUE;[email protected];X-NUM-GUESTS=0:mailto:[email protected] 
LOCATION: 
SEQUENCE:1 
END:VEVENT 
END:VCALENDAR'; 

mail('[email protected]', 'Accepted:', "Event accepted", $headers); 

Ical消息或方法本身有什么问题吗?这是事件回复应该发送的方式吗?

回答

5

以下代码将与谷歌日历一起使用。该附件由gmail处理,并且接受级联到事件。

$vcal = 'BEGIN:VCALENDAR 
PRODID:-//EXAMPLE.NU//SE 
VERSION:2.0 
CALSCALE:GREGORIAN 
METHOD:REPLY 
BEGIN:VEVENT 
DTSTART:20101215T160000Z 
DTEND:20101215T170000Z 
DTSTAMP:'.date('Ymd\THis\Z').' 
ORGANIZER;CN=Jean-Charles:mailto:[email protected] 
UID:[email protected] 
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED; 
[email protected]:mailto:[email protected] 
CREATED:19000101T120000Z 
DESCRIPTION:äåóö 
LAST-MODIFIED:'.date('Ymd\THis\Z').' 
LOCATION: 
SEQUENCE:0 
STATUS:CONFIRMED 
SUMMARY:a new test 
TRANSP:OPAQUE 
END:VEVENT 
END:VCALENDAR 
'; 

$vcal = utf8_encode($vcal); 

require('lib/phpmailer/class.phpmailer.php'); 
$mail = new PHPMailer(); 
$mail->AddAddress('[email protected]', 'Jean-Charles'); 
$mail->Body = "HTML BODY"; 
$mail->AltBody = "Text body"; 
$mail->Subject = "Email title"; 
$mail->Sender = "User Name"; 
$mail->FromName = "[email protected]"; 
$mail->AddStringAttachment($vcal, 'meeting.ics', "base64", "text/calendar"); 
$mail->Send(); 

重要的位是

  • 内容类型:文本/日历
  • 方法:回复
  • PARTSTAT:受理| DECLINED
  • UID

我不确定是否有必要发回所有冗余信息(des cription,总结,DTEND,为dtstart)

0

以下解决方案为我工作:

$mail->Subject = $name; 
$mail->Body = $description; 
$mail->AltBody = $body; // ical format 
$mail->Ical = $message; // ical format 

此方法并不重视iCal格式。