6.0.0-alpha10
5/15/25

[#13664] accept event to Horde CalDAV calendar from Thunderbird Lightning parses Attendees
Summary accept event to Horde CalDAV calendar from Thunderbird Lightning parses Attendees
Queue Kronolith
Queue Version 4.2.2
Type Bug
State Duplicate
Priority 2. Medium
Owners
Requester willem.verbruggen (at) anagky (dot) be
Created 11/05/2014 (3844 days ago)
Due
Updated 04/29/2022 (1112 days ago)
Assigned
Resolved 11/05/2014 (3844 days ago)
Milestone
Patch No

History
04/29/2022 08:18:14 AM rik (at) oemail (dot) nl Comment #27 Reply to this comment
to all who posted here: i finally got this working, not in Thunderbird 
but in Outlook. Pity cause i prefer Thunderbird, but i just need 
calendar invites to work appropriately.
Here's how to get it to work in Outlook (also not easy, but after 
initial setup it works):
https://techcommunity.microsoft.com/t5/outlook/email-client-that-is-able-to-handle-calendar-invites-with/m-p/3296279/highlight/false#M11286

02/17/2022 12:07:23 AM miyu (at) pokemail (dot) net Comment #26 Reply to this comment
This is still happening with Thunderbird 91.6.1 Cpanel 100.0 (Build 9) 
and Horde groupware 5.2.22

Test it with gmail calendar invites. Upon accepting invites in 
thunderbolt linked to horde caldav the duplication of invites and 
swapped organizer role occurs.

01/13/2022 11:10:32 AM roberthall83 (at) gmail (dot) com Comment #25 Reply to this comment

[Show Quoted Text - 21 lines]
12/03/2021 04:57:37 PM elliott (at) blaeberry (dot) com Comment #24 Reply to this comment
Still happens, my calendar is on Horde CalDav, and after accepting the 
meeting invitation in my thunderbird email program, it changed the 
meeting so that I'm the organizer.
Very confusing.
Does anyone know of any other settings (possibly within Horde) that 
could fix this?
Thanks.
12/09/2020 12:57:22 PM rl (at) rlit (dot) nl Comment #23 Reply to this comment

[Show Quoted Text - 16 lines]
Too bad it is not working.
You can install it on your own server from the available source code 
for free. Or perhaps you can find a provider that uses SOGo. Perhaps 
your question can be asked in the SOGo community.

12/09/2020 12:49:44 PM rik (at) oemail (dot) nl Comment #22 Reply to this comment

[Show Quoted Text - 9 lines]
Hi, i did try this option (client-side scheduling), but it also 
resulted in errors for me. I've never heard of SOGo, i just looked it 
up. It looks like a great solution. Is it available to individual 
users like me via a cloud account or something? Or do you need to be 
an organization that self-hosts it?

12/09/2020 12:30:17 PM rl (at) rlit (dot) nl Comment #21 Reply to this comment
Hi, i just want to add: i have just had to switch from Thunderbird 
to Outlook (which i hate, i love Thunderbird) because of this issue. 
Meeting invites are so often-used, this really needs to work 
flawlessly
Have you tried the Calendar option in Thunderbird: Prefer client-side 
email scheduling ?
Experienced this issue in the past, but after waiting very long i 
installed SOGo frontend recently because of this issue not being 
resolved (or not releasing Horde 6 where it should be fixed), for SOGo 
i need to enable Prefer client-side email scheduling to accept meeting 
invites correctly. The users that need calendar functionality are now 
using SOGo and the others Horde.


12/07/2020 04:47:52 PM rik (at) pro-bono (dot) nl Comment #19 Reply to this comment
Hi, i just want to add: i have just had to switch from Thunderbird to 
Outlook (which i hate, i love Thunderbird) because of this issue. 
Meeting invites are so often-used, this really needs to work flawlessly
12/04/2020 04:18:54 PM christoph (dot) gross (at) uni-tuebingen (dot) de Comment #18 Reply to this comment
So it looks like this issue is still open?
Or is our university just using an old version of horde?
09/27/2019 03:09:53 AM admin (at) natirar (dot) com (dot) au Comment #17 Reply to this comment
Is it likely this will be fixed?  I have just started using this and 
it's embarrasing when my clients invite me to a meeting and it looks 
like I have hijacked fheir meeting.
07/16/2019 02:13:15 PM fabiojsousa (at) gmail (dot) com Comment #16 Reply to this comment
I 've to leave the Horde Groupware Webmail Edition solution because 
this problem :(

I've approximately 300 users and this bug cause some spam issues with 
the invites duplication.
07/05/2019 02:52:11 PM per (at) frennbro (dot) com Comment #15 Reply to this comment
Any news about the release date ? I have my entire company
prevented from using the calendar activity... Can I put this fix 
directly to my code?
I would not expect anything.
This is an error that is now 5 years old.
Abandon ship is the signal!
07/05/2019 02:50:55 PM per (at) frennbro (dot) com Comment #14 Reply to this comment
Any news about the release date ? I have my entire company
prevented from using the calendar activity... Can I put this fix 
directly to my code?
07/05/2019 02:43:52 PM fabiojsousa (at) gmail (dot) com Comment #13 Reply to this comment
Any news about the release date ? I have my entire company
prevented from using the calendar activity... Can I put this fix 
directly to my code?
10/17/2018 10:47:26 AM Michael Rubinsky Comment #12 Reply to this comment
10/17/2018 09:04:47 AM rl (at) rlit (dot) nl Comment #11 Reply to this comment
The opposed fix is not fixing the issue completely. The problem is 
more complicated as stated earlier.
When an event is received and accepted in either Thunderbird or 
Outlook the event is hijacked and the ORGANIZER is now me. It should 
just Accept the event, notify the sender and add it to my calendar 
without changing the ORGANIZER, since i am just an ATTENDEE.
Also i can't understand that this issue still exists, i am wondering 
if it is a setting since this is such trivial behavior of a calendar 
and there are far more complicated parts in Horde. Hope this will be 
fixed since it is a showstopper at the moment for using Horde.
02/26/2018 08:08:04 PM carto (at) corridorappalachien (dot) ca Comment #9 Reply to this comment
Same thing is happening here.

I send an invite with Outlook, and the CalDav server also sends an 
invite to the attendees, resulting in duplicate invites.

horde 5.2.14
01/20/2018 05:51:33 AM per (at) frennbro (dot) com Comment #8 Reply to this comment
I have been in the same situation where I was happy to have CALDAV, 
but I sadly now have to abandon the solution.
I have had events popping up in Thunderbird every hour almost and I 
have to dismiss the events, with the result that also lawyers are now 
contacting me due to it is spamming the whole world also into the past.

This is completely unacceptable from a calendar that should be seen as 
more than competitive to Microsoft Outlook.

Another thing is the Shared address book which is like a donald duck 
implementation of any other existing address book.
I cannot put names on people and I cannot put proper addresses or 
nothing in it.
If this is what Horde is capable of delivering stay with Donald u k 
and mickey mouse for kids.

The current implementation has to either step up or you have to shut 
it down. It is not possible to use it in a professional evironment
12/29/2017 09:18:46 AM maxwhiskysync (at) gmail (dot) com Comment #7 Reply to this comment
Same here. The flood of emails is not acceptable. Can you please 
include a patch for this bug in some of the next versions? That would 
be great.
07/06/2017 01:48:07 PM horde (at) nagler-ihlein (dot) de Comment #6 Reply to this comment
Same with us. We changed to a provider using horde for CalDAV 
calendars and experience the same problem using Lightning to accept 
event invitations. Instead of simply adding the event the calender 
owner becomes the organizer.

Unbelievable that so little users experience this problem. Have really 
all turned to all-web applications and support for stand-alone and 
offline-possible solutions are treated as a poor cousin...?
03/28/2017 08:48:49 PM guygreg (at) openmailbox (dot) org Comment #5 Reply to this comment
We recently moved our mail server to a new provider and were so 
excited to use the CalDAV functionality bundled into cPanel (Horde) 
instead of the separate software we'd been using previously.

A few days in, we're drowning under a flood of emails generated as 
people accept invitations to events, and yet more as people change 
their reminders, or hit snooze, or decide they can't go.  And they all 
insist the sender is the organizer.

Now I find out that this has been known about for years, and not 
fixed?  The product is unusable like this, we can't be sending all 
these emails out to our clients stating we've taken over every meeting 
we've accepted an invitation to.

What a horrible letdown!

12/03/2014 05:38:52 PM kevin (at) kevin-online (dot) com Comment #4 Reply to this comment
Same here using Kontact and Lightning. Considering that Horde sends a 
duplicate of the event to business partners, I think the priority is 
more than just "medium". Also it is not a duplicate, as mentioned 
before: tracking the organizer is something different.

What confuses me a bit: how do others work with Kronolith? Did we 
maybe miss something important in the configuration? Or is adding 
events received by mail using CalDAV simply not supported and one must 
use IMP?
11/05/2014 10:21:01 AM willem (dot) verbruggen (at) anagky (dot) be Comment #3 Reply to this comment
Basically a duplicate of request #3965, please add your information 
there. See also request #13027.
We saw 3965 before and it is related: still the error is the parsing 
of the attendees thereby creating a meeting in your calendar with 
seemingly a wrong organizer.  BUT when doing the same from IMP, it 
works the same way with yourself also as organizer with the difference 
that there are no attendees .  So an enhancement to set the correct 
organizer is another step  forward (and as we saw in the code and the 
icalendar RFC an elaborate one) but not the problem here as IMP works 
the same way regarding organizer.  So for me this is not a duplicate.

Request 13027 has state resolved?
The parsing of attendees works correctly when creating new items via 
CalDAV from Lightning and has to keep on working this way.  Still 
there is a need NOT to parse the attendees when we are only accepting 
an externally received invite which we still want to take time in our 
own calendar after accepting.  This will have to be coded per client 
as I am not aware of a header/standard in the RFC that the clients 
might use.  Disclaimer: I am not a specialist in this icalendar RFC.

11/05/2014 09:49:44 AM Jan Schneider Comment #2
State ⇒ Duplicate
Reply to this comment
Basically a duplicate of request #3965, please add your information 
there. See also request #13027.
11/05/2014 09:32:32 AM willem (dot) verbruggen (at) anagky (dot) be Comment #1
Priority ⇒ 2. Medium
State ⇒ Unconfirmed
Patch ⇒ No
Milestone ⇒
Summary ⇒ accept event to Horde CalDAV calendar from Thunderbird Lightning parses Attendees
Type ⇒ Bug
Queue ⇒ Kronolith
Reply to this comment
Dear,

A meeting request arrives by e-mail in Thunderbird 31.2.0 with 
Lightning 3.3.1 installed from an external calendar application.  On 
accepting the meeting request putting it into a Kronolith calendar 
installed/connected from Lightning using CalDAV, Horde parses the 
attendees and puts them into the newly created request.

As a result Kronolith:
-> sends notifications to all the attendees from the organizers 
meeting as it is seen as a new meeting in Horde, effectively 
duplicating and hijacking someone else's meeting.
-> this happens for everyone accepting, and possibly also accepting 
the wrongly newly created meeting, with a mailing spree through the 
organization and towards the external partner as a result.
-> Horde treats accepting requests from Thunderbird differently than 
from within IMP with totally different meetings in Kronolith as a 
result, not working consistently.
-> Ligthing cannot be used as a mail client for accepting invites.

Thunderbird/Ligthning adds a header X-MOZ-RECEIVED-SEQUENCE to a 
meeting request being an accept on a received invite compared to a new 
meeting request created in LIghtning directly.

We could get a working, yes ugly but still a solution, patched up 
Kronolith with the following code changes whereby we check for the 
X-MOZ-RECEIVED-SEQUENCE header.  Hope it is any help to you.

vi /var/www/horde/kronolith/lib/Event.php

  363     /**
  364      * The cached event duration, split up in time units.
  365      *
  366      * @see getDuration()
  367      * @var stdClass
  368      */
  369     protected $_duration;
  370
   371     //OpenOutsourcing added properties
   372     //public $organizer;
   373     public $x_moz_received_sequence;
   374     public $x_moz_received_attendees = array();
  375
  376     /**
  377      * Constructor.
  378      *
  379      * @param Kronolith_Driver $driver  The backend driver that 
this event is
  380      *                                  stored in.
  381      * @param mixed $eventObject        Backend specific event object
  382      *                                  that this will represent.
  383      */
  384     public function __construct(Kronolith_Driver $driver, 
$eventObject = null)

1052     /**
1053      * Updates the properties of this event from a Horde_Icalendar_Vevent
1054      * object.
1055      *
1056      * @param Horde_Icalendar_Vevent $vEvent  The iCalendar data 
to update
1057      *                                        from.
1058      * @param boolean $parseAttendees         Parse attendees too?
1059      *                                        @since Kronolith 4.2
1060      */
1061     public function fromiCalendar($vEvent, $parseAttendees = false)
1062     {
1063
  1064         // OpenOutsourcing
  1065         // Add X-MOZ-RECEIVED-SEQUENCE to object
  1066         try {
  1067             $this->x_moz_received_sequence = False;
  1068             // This call throws exception when attribute does not exist
  1069             $moz_received = 
$vEvent->getAttribute('X-MOZ-RECEIVED-SEQUENCE');
  1070             $this->x_moz_received_sequence = True;
  1071         } catch (Horde_Icalendar_Exception $e) {}

2659     public function addAttendee($email, $attendance, $response, 
$name = null)
2660     {
2661         if ($attendance == Kronolith::PART_IGNORE) {
2662             if (isset($this->attendees[$email])) {
2663                 $attendance = $this->attendees[$email]['attendance'];
2664             } else {
2665                 $attendance = Kronolith::PART_REQUIRED;
2666             }
2667         }
2668         if (empty($name) && isset($this->attendees[$email]) &&
2669             !empty($this->attendees[$email]['name'])) {
2670             $name = $this->attendees[$email]['name'];
2671         }
2672
  2673         // OpenOutsourcing
  2674         // Add IF and wrap existing code into ELSE
  2675         if ($this->x_moz_received_sequence == True) {
  2676             $this->x_moz_received_attendees[$email] = array(
  2677                 'attendance' => $attendance,
  2678                 'response' => $response,
  2679                 'name' => $name
  2680             );
  2681         }
  2682         else {
  2683             $this->attendees[$email] = array(
  2684                 'attendance' => $attendance,
  2685                 'response' => $response,
  2686                 'name' => $name
  2687             );
  2688         }
2689     }

vi /var/www/horde/kronolith/lib/Application.php
800     public function davPutObject($collection, $object, $data)
...
854             // Save entry.
855             $id = $event->save();
856
857             if (!$existing_event) {
858                 $dav->addObjectMap($id, $object, $internal);
859             }
860
  861             // OpenOutsourcing
  862             // Send ACCEPT and DECLINE messages on 
X-MOZ-RECEIVED-SEQUENCE
  863             if($event->x_moz_received_sequence == True) {
  864
  865                 $ident_user = 
$GLOBALS['injector']->getInstance('Horde_Core_Factory_Identity')- 
;create($event->creator);
  866                 $reply_to = $ident_user->getValue('from_addr');
  867
  868                 /** Invitation responses */
  869                 $RESPONSE_NONE      = 1;
  870                 $RESPONSE_ACCEPTED  = 2;
  871                 $RESPONSE_DECLINED  = 3;
  872                 $RESPONSE_TENTATIVE = 4;
  873
  874                 $response = $RESPONSE_NONE;
  875                 foreach ($event->x_moz_received_attendees as 
$email => $status) {
  876                     if ($email == $reply_to) {
  877                         $response = $status['response'];
  878                     }
  879                 }
  880
  881                 $resource = new Horde_Itip_Resource_Identity(
  882                     $GLOBALS['injector']->getInstance('IMP_Identity'),
  883                     $content->getAttribute('ATTENDEE'),
  884                     $reply_to
  885                 );
  886
  887                 switch ($response) {
  888                     case $RESPONSE_ACCEPTED:
  889                         $type = new 
Horde_Itip_Response_Type_Accept($resource);
  890                         break;
  891                     case $RESPONSE_TENTATIVE:
  892                         $type = new 
Horde_Itip_Response_Type_Tentative($resource);
  893                         break;
  894                     case $RESPONSE_DECLINED:
  895                         $type = new 
Horde_Itip_Response_Type_Decline($resource);
  896                         break;
  897                     default:
  898                         $type = new 
Horde_Itip_Response_Type_Accept($resource);
  899                         break;
  900                 }
  901
  902                 try {
  903                     Horde_Itip::factory($content, 
$resource)->sendMultiPartResponse(
  904                         $type,
  905                         new Horde_Itip_Response_Options_Horde(
  906                             'UTF-8',
  907                             array(
  908                                 'dns' => 
$GLOBALS['injector']->getInstance('Net_DNS2_Resolver'),
  909                                 'server' => 
$GLOBALS['conf']['server']['name']
  910                             )
  911                         ),
  912                         $GLOBALS['injector']->getInstance('IMP_Mail')
  913                     );
  914                 } catch (Horde_Itip_Exception $e) {
  915                     system("echo SENT ERROR >> /tmp/willem");
  916                 }
  917                 //$type = new 
Horde_Itip_Response_Type_Decline($resource);
  918             }
919
920             // Send iTip messages.

KR,

Willem

Saved Queries