Connecting to Microsoft Exchange Calendar from Mozilla Thunderbird

by Martin Monperrus

To connect to a calendar hosted on Microsoft Exchange, there are three solutions: ExQuilla, DavMail and Exchange Calendar.

ExQuilla

ExQuilla for Microsoft Exchange is a registered Thunderbird addon. It only supports email and contact, but does not support calendar ("Calendar features are not supported.").

Exchange Calendar

Exchange Calendar is an addon hosted on Github (and not on https://addons.mozilla.org/). It has a number of interesting features, but has not yet been ported to most recent versions of Thunderbird and Lightning.

This code has traveled quite a bit, it was formerly, Ericsson/exchangecalendar, 1stsetup/exchangecalendar, lightning-exchange-provider

DavMail

DavMail is NOT an addon but a proxy. It translates the MS Exchange Web API into a standard CalDAV API, which is natively supported by Thunderbird. It is implemented in Java and is still actively developed (see last commits). It uses the EWS API of MS Exchange.

If run on localhost, the calendar URL is of the form (the slash at the end is important)

http://localhost:1080/users/<user>@<domain>/calendar/

eg http://localhost:1080/users/foo@ug.kth.se/calendar/

See:

Other solutions

There are alternative confidential solutions:

Recommandation

I currently use DavMail because it is free and it works.

I hae created davmail-start, configured as desktop autostart application, that contains this line:

  /sbin/start-stop-daemon --start --pidfile /tmp/davmail.pid --make-pidfile -b --startas /home/foo/davmail/davmail.sh /home/foo/davmail/davmail.properties

Troubleshooting

DavMail config:

#############################################################
# Davmail settings

# Server or workstation mode
davmail.server=true
# connection mode auto, EWS or WebDav
davmail.enableEws=EWS

# runs Exchange Server 2013 15.0.1156.10
# base Exchange EWS url
davmail.url=https://webmail.kth.se/EWS/Exchange.asmx

# base Exchange OWA url
# davmail.url=https://webmail.kth.se/owa/

davmail.caldavPort=1080
# no port, means disabled
davmail.imapPort=
davmail.ldapPort=
davmail.popPort=
davmail.smtpPort=

#############################################################
# Network settings

# Network proxy settings
davmail.enableProxy=false
davmail.useSystemProxies=false
davmail.proxyHost=
davmail.proxyPort=
davmail.proxyUser=
davmail.proxyPassword=

# proxy exclude list
davmail.noProxyFor=

# allow remote connection to DavMail
davmail.allowRemote=true
# bind server sockets to a specific address
davmail.bindAddress=
# client connections SO timeout in seconds
davmail.clientSoTimeout=

# DavMail listeners SSL configuration
davmail.ssl.keystoreType=
davmail.ssl.keystoreFile=
davmail.ssl.keystorePass=
davmail.ssl.keyPass=

# Accept specified certificate even if invalid according to trust store
davmail.server.certificate.hash=

# disable SSL for specified listeners
davmail.ssl.nosecurecaldav=false
davmail.ssl.nosecureimap=false
davmail.ssl.nosecureldap=false
davmail.ssl.nosecurepop=false
davmail.ssl.nosecuresmtp=false

# disable update check
davmail.disableUpdateCheck=true

# Send keepalive character during large folder and messages download
davmail.enableKeepalive=false
# Message count limit on folder retrieval
davmail.folderSizeLimit=0
# Default windows domain for NTLM and basic authentication
davmail.defaultDomain=

#############################################################
# Caldav settings

# override default alarm sound
davmail.caldavAlarmSound=
# retrieve calendar events not older than 90 days
davmail.caldavPastDelay=90
# WebDav only: force event update to trigger ActiveSync clients update
davmail.forceActiveSyncUpdate=false

#############################################################
# IMAP settings

# Delete messages immediately on IMAP STORE \Deleted flag
davmail.imapAutoExpunge=true
# Enable IDLE support, set polling delay in minutes
davmail.imapIdleDelay=
# Always reply to IMAP RFC822.SIZE requests with Exchange approximate message size for performance reasons
davmail.imapAlwaysApproxMsgSize=

#############################################################
# POP settings

# Delete messages on server after 30 days
davmail.keepDelay=30
# Delete messages in server sent folder after 90 days
davmail.sentKeepDelay=90
# Mark retrieved messages read on server
davmail.popMarkReadOnRetr=false

#############################################################
# SMTP settings

# let Exchange save a copy of sent messages in Sent folder
davmail.smtpSaveInSent=true

#############################################################
# Loggings settings

# log file path, leave empty for default path
davmail.logFilePath=/var/log/davmail.log
# maximum log file size, use Log4J syntax, set to 0 to use an external rotation mechanism, e.g. logrotate
davmail.logFileSize=1MB
# log levels
log4j.logger.davmail=WARN
log4j.logger.httpclient.wire=WARN
log4j.logger.org.apache.commons.httpclient=WARN
log4j.rootLogger=WARN

#############################################################
# Workstation only settings

# smartcard access settings
davmail.ssl.pkcs11Config=
davmail.ssl.pkcs11Library=

# SSL settings for mutual authentication
davmail.ssl.clientKeystoreType=
davmail.ssl.clientKeystoreFile=
davmail.ssl.clientKeystorePass=

# disable all balloon notifications
davmail.disableGuiNotifications=false
# disable startup balloon notifications
davmail.showStartupBanner=true

# enable transparent client Kerberos authentication
davmail.enableKerberos=false
            
Tagged as: