2013-02-26 117 views
11

我試圖通過使用iCalendar標準在我的Microsoft Outlook日曆中創建一個事件。我從.NET應用程序向我的Exchange郵箱發送了一封內容類型爲「text/calendar」的電子郵件。 它作爲會議請求到達Outlook。一切看起來不錯,直到我單擊收到的會議請求時,Outlook將其顯示爲一個空的日曆視圖,其文本爲:「在日曆」中找不到會議。 我不明白爲什麼 - 我想創建一個事件,它試圖找到一些現有的?iCalendar不爲組織者創建事件

如果我把一模一樣的電子郵件給任何人,除了主辦會議的參與者,它會在他們的日曆事件,一切似乎是確定。 我發現它是由「ORGANIZER」屬性引起的。如果它被設置爲組織者的電子郵件(我的電子郵件),並向自己發送會議請求,則不會使用「在日曆中找不到會議」信息創建事件。

所以,問題是爲什麼它不創建組織者的事件?如果組織者接受或取消會議,組織者必須創建該事件才能被其他參與者通知。

這裏是的iCalendar:

BEGIN:VCALENDAR 
PRODID:-//Company//Product 3.0//EN 
VERSION:2.0 
CALSCALE:GREGORIAN 
METHOD:REQUEST 
BEGIN:VEVENT 
DTSTART:20130225T200000Z 
DTEND:20130225T203000Z 
DTSTAMP:20130225T143039Z 
ORGANIZER;CN="John Doe":mailto:[email protected] 
UID:[email protected] 
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN="John Smith" 
;X-NUM-GUESTS=0:mailto:[email protected] 
CLASS:PUBLIC 
CREATED:20130225T143039Z 
DESCRIPTION: 
LAST-MODIFIED:20130225T143039Z 
LOCATION: 
SEQUENCE:0 
STATUS:CONFIRMED 
SUMMARY:Booking test 
TRANSP:OPAQUE 
END:VEVENT 
END:VCALENDAR 
+0

我遇到同樣的問題,我嘗試向組織者發送邀請(A)沒有「組織者」,事件被添加,然後我發送了另一個「請求」,包括所有「參加者」(B&C),並且這次將「組織者」設置爲A,在這種情況下,B&C將事件正確地進行,但對於AI會得到「對不起!組織者是不允許的。「因此組織者無法查看與會者,有什麼想法? – Asgaroth 2013-07-14 20:54:24

+0

昨天我添加了新的答案,請檢查一下,看看是否有幫助 – gregjer 2013-07-17 07:40:01

回答

14

比方說,組織者希望創建一個滿足爲2名與會者。他在預訂系統中填寫表單。 預訂系統向他自己和2位與會者發送包含iCalendar標準的電子郵件。

此方案不起作用。

無法在組織者的日曆中創建事件(可取消會議對象)。客戶認爲包含iCalendar格式的電子郵件只是通知組織者日曆中已創建的會議的與會者。如果這樣的電子郵件到達組織者的郵箱,則客戶端應用程序不會在組織者的日曆中創建事件。它假設一個事件是由組織者自己創建的。例如:Outlook在這種情況下會告訴您「在日曆中找不到會議」。

如果你問一下微軟的支持,他們只是告訴你,他們不支持開放標準:http://support.microsoft.com/kb/2269506

合作解決這個問題是使用平臺服務(Exchange Web ServicesGoogle Calendar API)創建的一個事件組織者的日曆。忘記iCalendar標準。 這些服務可以配置爲自動向與會者發送通知。 因此,它是足以通過「SendInvitationsMode.SendToAllAndSaveCopy」如果你使用EWS:

Appointment appointment = new Appointment(service); 
appointment.Subject = "Status Meeting"; 
appointment.Body = "The purpose of this meeting is to discuss status."; 
appointment.Start = new DateTime(2014, 3, 1, 9, 0, 0); 
appointment.End = appointment.Start.AddHours(2); 
appointment.Location = "Conf Room"; 
appointment.RequiredAttendees.Add("[email protected]"); 
appointment.RequiredAttendees.Add("[email protected]"); 
appointment.OptionalAttendees.Add("[email protected]"); 
appointment.Save(SendInvitationsMode.SendToAllAndSaveCopy); 

或將「sendNotifications」參數設置爲true在谷歌日曆API的情況下。

您不需要發送電子郵件給每個特定的與會者。

+0

感謝您的回答,我擔心iCalendar只會交換關於已經存在的事件的信息,所以iCalendar不起作用,正如您所說的,如果使用API​​直接處理.ics文件不是必要的,謝謝您的答案,我會給你賞金,但我不能選擇你的答案,因爲它不是我的問題。 – Asgaroth 2013-07-17 13:34:20

+0

我正面臨ical.net的問題。使用ical.net在我的.Net應用程序中創建一個日曆ics。但是,在我的環境中,日曆郵件看起來很好,具有接受或拒絕的能力。然而,在客戶環境中,沒有選擇接受或取消該請求。這隻在客戶使用Outlook 2010和Outlook 2016時纔會發生。然而,在我們的環境中,我們看到Outlook 2010和2016的日曆電子郵件都很好。任何幫助將不勝感激!謝謝 – k2ibegin 2017-07-31 12:04:43

0

我會認爲你的問題是因爲Exchange假定該事件的組織者,也是事件的發起者。這看起來很公平,否則將會議發送給組織者的會議將會是兒童遊戲,他們會自動添加到該人員的日曆中。

一切都表示,不知道怎麼去解決這個問題。

0

事件邀請的行爲通過電子郵件被髮送在rfc6047這進一步擴展了的iCalendar RFC(RFC5545)進行說明。

section 2section 3安全性,總結了2個欺騙威脅:

欺騙 「組織者」 和欺騙的 「與會者」

惡搞@ XYZ .example.net不允許修改或取消由[email protected]組織的會議。

到您的情況: 1.你發送同一個電子郵件地址作爲交換的邀請(談論的郵件不是Organizer:mailtoFrom:如果沒有它可能是值得嘗試通過發送它?交換地址 2.上述內容不適用,爲了滿足組織者在其日曆中收到邀請的需要,您可能需要將其以編程方式添加到組織者的日程中,因爲它很可能是CUA(日曆用戶代理)或交易所不允許第三方郵件到議程中添加事件,而最終用戶UI的使用。

+0

感謝您的幫助,邀請函中使用的電子郵件地址與交換相同,因此問題仍然存在,我們現在嘗試MS支持以獲取一些提示。 – gregjer 2013-02-27 11:57:38

12

這是一個老問題,但我認爲這是由於使用 方法:請求 這標誌着應更新,而不是它是一個新的項目。相反,使用 方法:發佈

我可以確認這適用於DDay.iCal和Outlook日曆。

+0

作爲會議組織者,我在Outlook中得到「您還沒有發送此會議​​邀請」,我必須從Outlook發送它。 – bradvido 2014-06-05 17:43:36

+1

方法:即使我是會議組織者,PUBLISH也爲我修好了。 – 2014-08-14 21:50:30

+0

@Bart感謝切換到現在發佈顯示打開'.ics'文件後的「保存按鈕」,不再顯示「在日曆中找不到會議」 – 2014-08-15 18:30:45

0

在最近幾個月裏,我們的服務也滿足同樣的問題,因爲你: 我們的服務創造的組織者和與會者會議日曆, 如果與會者包括組織者,組織者(作爲atteendee)可以得到一個日曆電子郵件, 但不允許接收/拒絕會議(該按鈕被禁用),也不允許在日曆中看到它(沒有日曆事件)。

最後,我注意到,僅當以下的條件下會出現這種情況: 1. mail.From =組織者 2. Ateendees.contains(組織者)//不區分大小寫的。

所以,我簡單地改變我的代碼follwing,併爲所有與會者正常工作(包括組織者):

if (!attendeeEmail.ToLower().Contains(organizer.Address.ToLower())) 
{ 
    message.From = organizer; 
} 
else 
{ 
    //such as your actual email sender, in our case, our mail sender use another email, 
    //say ActualSender,and if leave empty, then our mail sender will fill as: 
    message.From = ActualSenderEmail; 
} 
1

這可把我惹火了一個星期,所以它很高興看到別人確認我懷疑的是什麼。實際上有一個相對簡單的解決方案,它解決了這個問題,雖然它不是很優雅。我可以理解,爲什麼不允許從外部來源擔任組織者的角色,但是令人煩惱的是你不能。

發出2邀請。一個給自己(或者組織者是誰),然後與其他人不同。

的一個對自己應該有別的東西比你等下爲ORGANSISER,例如主辦單位:[email protected]

一來每個人應該有你的電子郵件跌組織者。

要使用此方法,您應該設置METHOD:REQUEST。如果您將其設置爲PUBLISH,您將在更新中獲得重複內容。

這種方式意味着您在日記中獲得會議,並且您也會收到回覆(要獲得回覆,您需要爲每位與會者添加以下行: ATTENDEE; CN =「The Name」; RSVP = TRUE:mailto: [email protected]。)

請注意,UID對於這兩個版本的文件都是相同的。如果組織者首先獲得邀請,以便他們在開始獲得回覆之前接受它,則會有所幫助,否則人們將回復那些尚未有效的事情。這不會阻止他們接受邀請,但對於組織者來說可能有點混亂。爲了解決這個問題,我在電子郵件1和2之間放了一段時間。