Thunderbird Calendars – the definitive guide

Setting up Thunderbird calendars with a CalDAV back-end is easy. However, setting it up correctly, especially when you are working in a professional environment where colleagues share their calendars and send invitations, isn’t straightforward or well documented. Fine tuning is needed for invitations to work correctly.

For as long as I’ve been using Thunderbird calendars, (previously known as Lightning), there have been complaints about calendering not working. Non working invitations, appointments getting lost – it’s all there. Here I present you a simple guide to setup Thunderbird in a multi-calendar (i.e. lots of colleagues with shared calendars) environment.

What you need is:

  • a CalDAV calendar server. Most well known today is Nextcloud, but also working are Owncloud, Sabre/DAV derivatives (fruux actually being the ones behind Sabre/DAV and Sabre/DAV being the calendering in Owncloud/Nextcloud, as far as I can see).
  • Obviously, you will need an account on this calendar server. You should have a username and a working password.
  • A Thunderbird e-mail client – probably with a working e-mail address.

First of all, you’ll probably want to check if your calendar server supports iMIP, where iMIP stands for e-mail invitations.

The thing is: until about 2015, e-mail clients (i.e. calendar programs) used to send their own invitations to the outside world. But nowadays, most CalDAV servers do the e-mail handling server side. So please make sure your server does that, too. Then also check if your actual e-mail address is known to the calendar server. You’ll want the server to send out invitations with your.mail@example.com as sender address and not youraccount@vhost55228.serverblock.example.com – or even noreply@localhost or something.

If the server does not send out mails by itself, you can tell Thunderbird to do so. But I didn’t test that and this guide is not addressing any of that. Could work, could not.

OK, so you have checked the e-mail capacities of your server, now let’s add our calendar to Thunderbird.

Adding calendars

Adding calendars is pretty straightforward: go to the Calendar tab. Press the small 🗓️ New Calendar...button, choose on the network. Your username obviously is the username from your OwnCloud, NextCloud or Sabre/DAV server and the URL could be something like https://server.example.com/remote.php/dav/ but will be different in your situation.

Thunderbird will happily detect all your and all your collegues’ calendars. But beware: do not press the Subscribe button because there is a catch: all these detected calendars, yours and your colleagues’, will be your own calendars for Thunderbird. So click properties for every calendar that is not your own; set Email to None. You may also want to uncheck the Show Reminders checkbox to prevent reminders for colleagues to show up on your computer.

Should you not do this and leave your own mail address for email in your colleagues calendar, then whenever a colleague sends you an invititation, Thunderbird will see the appointment in one of “your” calendars (actually: in your colleagues calendar) and will tell you This message contains an event that has already been processed.

So, having your colleagues’ calender with your own mail address leads to:

  • you will not see invitations by your direct colleagues;
  • you will only see “This message contains an event that has already been processed”;
  • your colleague will not know if you’re going to attend;
  • and even worse: the appointments will not show up in your, like really your, calendar.

For the calendars that actually are yours, keep the email identity as is or set it to one of your other mail addresses. Now Thunderbird will correctly assume that an invitation from colleague@example.com to your.mailaddress@example.com is an actual invitation – and ask you to Accept, Tentative or Decline.

New colleague

Should a new colleague enter the building, your workflow is identical. Unfortunately, it is really identical: press again the small 🗓️ New Calendar...button, and again choose on the network. Re-enter your username and re-enter the URL; then also re-enter the password – even if you had Thunderbird remember that for you.

You can, obviously, fetch the password first from within Thunderbird (edit, settings, Privacy & Security, Saved Passwords…, right click the provider URL and click “copy password”), which saves a bit of time but not much.

Thunderbird will happily find your new colleagues calendars and luckily, it will remember the other calendars so you only have to click properties for the new colleagues calendar. But you’ll have to do this for every Thunderbird installation that has to see the new shared calendar.

Any new calendar, obviously, asks for the same amount of work: re-entering credentials for every Thunderbird instance that has to show the new calendar.

Workaround

Luckily, there is an add-on that helps with the password and URL. If you install the TbSync add-on and the accompanying Provider for CalDAV & CardDav, aka dav-4-tbsync, life becomes a tiny bit easier, but not that much. TbSync can detect new calendars all by itself; but you still need to change the Email identity for newly detected calendars and you’ll have to manually enable the newly found calendars.

Advanced preferences

Can’t this be scripted? Well, it could, but it’s not easy. Calendars are in prefs.js under calendar.registry and they are named with a random UUID string for ID. To set the email identity, you would need to add imip.identity.key, because initially, it isn’t there. This looks like so in the prefs.js file:

user_pref(“calendar.registry.7f836935-d991-4727-99db-d9520747fd30.imip.identity.key”, “”);
user_pref(“calendar.registry.7f836935-d991-4727-99db-d9520747fd30.name”, “Colleague”);
user_pref(“calendar.registry.7f836935-d991-4727-99db-d9520747fd30.notifications.times”, “”);
user_pref(“calendar.registry.7f836935-d991-4727-99db-d9520747fd30.suppressAlarms”, true);

Free/busy?

Whenever you invite anyone to your appointment, Thunderbird is supposed to show their availibility. However, the only thing Thunderbird shows is a pink column that says “No Information”. I haven’t found out how to actually publish or fetch this free/busy information. I did, however, find Sabre/DAV bugs that seem to point to this issue but also a few that seem to suggest it is there already. So I’m not sure if publishing free/busy information is available yet, I’m tempted to think it is not. If I find out, I’ll add to this post and in case you know, please drop me a line.

Final words

There is a feature request for the imip.identity.key issue (being id1, your primary mail address, if empty), that can be found at https://github.com/jobisoft/TbSync/issues/678#issuecomment-2188665457. I actually hope that someone with more javascript skills than I have will address it. Hopefully we’ll have working interoperable calendars for workgroups soon…

Leave a Reply

Your email address will not be published. Required fields are marked *