2013-02-26 10 views
11

Próbuję utworzyć wydarzenie w moim kalendarzu Microsoft Outlook za pomocą standardu iCalendar. Wysłałem e-mail z typem treści "text/calendar" do mojej skrzynki pocztowej Exchange z aplikacji .NET. Pojawia się w programie Outlook jako wezwanie na spotkanie. Wszystko wygląda dobrze, aż do momentu, gdy kliknę otrzymane wezwanie na spotkanie, program Outlook wyświetla go jako pusty widok kalendarza z tekstem: "Spotkania nie można znaleźć w kalendarzu". Nie rozumiem, dlaczego - chciałem stworzyć wydarzenie i próbuję znaleźć jakieś istniejące?iCalendar nie tworzy zdarzenia dla organizatora

Jeśli wyślę dokładnie ten sam e-mail do uczestnika spotkania, z wyjątkiem organizatora, utworzy wydarzenie w swoich kalendarzach i wszystko będzie w porządku. Odkryłem, że jest to spowodowane przez właściwość "ORGANIZATOR". Jeśli jest ustawiony na adres e-mail organizatora (mój adres e-mail) i wysyłam do mnie wezwanie na spotkanie, wydarzenie nie zostanie utworzone z informacją "Spotkanie nie zostało znalezione w kalendarzu".

Pytanie brzmi, dlaczego nie tworzy ono wydarzenia dla organizatora? Organizator musi mieć to wydarzenie, aby zostać powiadomionym przez innych uczestników, jeśli zaakceptowali lub odwołali spotkanie.

Oto 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

Mam ten sam problem, próbowałem wysłać zaproszenie do organizatora (A) bez "ORGANIZATORA", wydarzenie zostanie dodane, a następnie Przesyłam kolejne "ŻĄDANIE" zawierające wszystkie "UCZESTNICY" (B & C) i tym razem ustawiając "ORGANIZATOR" na A, w tym przypadku B & C otrzymało odpowiednie wydarzenie, ale dla AI otrzymałem "Przepraszam! organizator nie jest dozwolony. " w rezultacie organizator nie może zobaczyć uczestników, żadnych pomysłów? – Asgaroth

+0

Dodałem nową odpowiedź wczoraj, sprawdź to i zobacz, czy to ci pomoże – gregjer

Odpowiedz

14

Załóżmy, że organizator chce utworzyć spotkanie dla 2 uczestników. Wypełnia formularz w systemie rezerwacji. System rezerwacji wysyła wiadomość e-mail zawierającą standard iCalendar do siebie i do 2 uczestników spotkania.

Ten scenariusz nie działa.

Nie można utworzyć wydarzenia (anulowanego obiektu spotkania) w kalendarzu organizatora. Klient uważa, że ​​e-mail zawierający format iCalendar to tylko powiadomienie dla uczestnika spotkania już utworzone w kalendarzu organizatora. Jeśli taki e-mail dotrze do skrzynki pocztowej organizatora, aplikacja kliencka nie utworzy wydarzenia w kalendarzu organizatora. Zakłada, że ​​wydarzenie zostało stworzone przez samego organizatora. Np .: Outlook informuje w takim przypadku, że "Spotkania nie można znaleźć w kalendarzu".

Jeśli zapytać Microsoft wsparcia o nim, tylko powiedzieć, że nie wspiera otwarte standardy: http://support.microsoft.com/kb/2269506

Roztwór roboczy tego problemu jest korzystanie z usług platformy (Exchange Web Services lub Google Calendar API), aby utworzyć wydarzenie w kalendarz organizatora. Zapomnij o standardzie iCalendar. Usługi można skonfigurować do automatycznego wysyłania powiadomień do uczestników. Więc wystarczy przejść „SendInvitationsMode.SendToAllAndSaveCopy” jeśli używasz 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); 

lub ustaw „sendNotifications” parametr na true w przypadku kalendarza Google API.

Nie musisz wysyłać wiadomości e-mail do poszczególnych uczestników.

+0

Dziękuję za odpowiedź, obawiałem się, że iCalendar służy jedynie wymianie informacji o istniejącym już wydarzeniu, więc iCalendar sam nie działa, a jak już powiedziałeś, jeśli korzystanie z plików obsługi interfejsu API bezpośrednio nie jest konieczne, dziękuję za twoje odpowiedz, dam ci nagrodę, ale nie mogę wybrać twojej odpowiedzi, ponieważ nie jest to moje pytanie. – Asgaroth

+0

Mam do czynienia z problemem z ical.net. Tworzenie kalendarzy w mojej aplikacji .Net przy użyciu ical.net. Jednak w moim środowisku wiadomości e-mail z kalendarza wyglądają dobrze, z możliwością ich akceptowania lub odrzucania. W środowisku klientów nie ma jednak opcji, aby zaakceptować lub anulować tę prośbę. Dzieje się tak tylko z klientem na rok 2010 i rok 2016. jednak w naszym środowisku widzimy e-maile z kalendarza dobrze na Outlook 2010 i 2016. Każda pomoc będzie doceniona! Dzięki – k2ibegin

0

Przypuszczam, że problem jest z powodu wymiany zakłada, że ​​organizator imprezy jest również pomysłodawcą imprezy. Wydaje się to dość sprawiedliwe, ponieważ w przeciwnym razie byłoby dziecinnie proste wysyłać spotkania do osób, które je organizują, i automatycznie dodawać je do kalendarza danej osoby.

Wszystko to powiedziawszy, nie ma pojęcia, jak obejść ten problem.

0

Zachowanie zaproszenia do zdarzenia wysyłanego pocztą elektroniczną opisano w rfc6047, co dodatkowo rozszerza specyfikację RFC5545 (icalendar RFC).

section 2 i section 3 na bezpieczeństwo, podsumowuje dwa zagrożenia fałszowaniu:

spoofing "Organizatorem" i podszywaniu się "uczestnika"

który jest

naciąganie @ xyz .example.net nie może modyfikować ani anulować spotkania zorganizowanego przez [email protected]

do sprawy: 1. Czy wysłać zaproszenie z tego samego adresu e-mail jako swojej wymiany (mówimy o From: na poczcie nie Organizer:mailto czy nie warto byłoby próbuje wysłać go za pośrednictwem? adres wymiany: 2. Jeśli powyższe nie zadziała, aby zaspokoić zapotrzebowanie organizatora na zaproszenie w swoim kalendarzu, prawdopodobnie trzeba będzie go wpisać programowo w harmonogramie organizatora, ponieważ jest prawdopodobne, że CUA (Agent Użytkownika Kalendarza) lub Exchange nie zezwala zewnętrznemu programowi pocztowemu na dodawanie zdarzeń w porządku obrad bez używania interfejsu użytkownika końcowego użytkownika:

+0

Dzięki za pomoc, adres e-mail użyty w zaproszeniu jest taki sam jak w przypadku wymiany, więc problem nadal istnieje, staramy się teraz o wsparcie dla MS, aby uzyskać wskazówki. – gregjer

12
To jest trochę stary problem, ale myślę, że jest to spowodowane użyciem METODA: WNIOSEK Oznacza to, że kod ical powinien zostać zaktualizowany, a nie, że jest nowy. Zamiast tego użyj: METHOD: PUBLISH

Mogę potwierdzić, że działa to z DDay.iCal i Outlook Calendars.

+0

Jako organizator spotkania otrzymuję komunikat "Nie wysłałeś jeszcze zaproszenia na spotkanie" w Outlooku i muszę wysłać je z Outlooka. – bradvido

+1

METODA: PUBLIKACJA naprawiła to dla mnie, nawet gdy jestem organizatorem spotkania. –

+0

@Bart dzięki przełączaniu do publikowania pokazuje teraz "przycisk zapisu" po otwarciu pliku '.ics' i nie wyświetla się" Spotkanie nie może być znalezione w kalendarzu " –

0

W ostatnich miesiącach nasze usługi także spotkać ten sam problem jak ty: nasz serwis utworzyć spotkanie kalendarz dla organizatora i uczestników, jeśli uczestnicy zawiera organizer, organizer (jako atteendee) mogą otrzymać wiadomość e-mail kalendarza ale nie może odbierać/odrzucać spotkania (przycisk jest wyłączony) ani wyświetlać go w kalendarzu (bez zdarzenia kalendarza).

Wreszcie, zauważam, że tylko pod warunkiem, że stanie się to: 1. mail.From = organizer 2. Ateendees.contains (organizer) // bez rozróżniania wielkości liter.

Tak, ja po prostu zmienić swój kod do follwing, i to działa dobrze dla wszystkich uczestników (m.in. organizatora):

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

To doprowadzało mnie do szaleństwa przez tydzień, więc miło jest zobaczyć kogoś innego potwierdzając co podejrzewałem. W rzeczywistości istnieje stosunkowo proste rozwiązanie, które rozwiązuje problem, chociaż nie jest zbyt eleganckie. Rozumiem, dlaczego nie można przyjąć roli organizatora z zewnętrznego źródła, ale denerwujące jest to, że nie możesz.

Wyślij 2 zaproszenia. Jeden dla siebie (lub kimkolwiek jest organizator), a następnie inny dla wszystkich pozostałych.

Ten sam dla siebie powinien mieć coś innego niż ty jako ORGANSISER, np. ORGANIZATOR: [email protected]

Ten adres e-mail powinien zostać przesłany jako organizator.

Dla tego podejścia do pracy powinieneś ustawić METODĘ: WNIOSEK. Jeśli ustawisz opcję PUBLISH, otrzymasz duplikaty aktualizacji.

Podejście to oznacza, że ​​otrzymujesz spotkanie w swoim dzienniku, a także otrzymujesz odpowiedzi (aby uzyskać odpowiedzi, musisz podać następujący wiersz dla każdego uczestnika: UCZESTNICZEGO, CN = "Imię", RSVP = PRAWDA: mailto: [email protected])

Należy zauważyć, że identyfikator UID jest taki sam dla obu wersji pliku. Pomaga, jeśli ORGANIZATOR otrzymuje zaproszenie, aby mogli je zaakceptować, zanim zaczną otrzymywać odpowiedzi, w przeciwnym razie ludzie będą odpowiadać na coś, co jeszcze nie istnieje. Nie spowoduje to jednak, że zaakceptują zaproszenie, ale może to być trochę dezorientujące dla ORGANIZATORA. Aby temu zaradzić, wprowadziłem niewielkie opóźnienie między e-mailem 1 i 2.

Powiązane problemy