Skip to content

tommygnr/outlookcaldavsynchronizer

 
 

Repository files navigation

Outlook CalDav Synchronizer

Outlook Plugin, which synchronizes events, tasks and contacts(beta) between Outlook and Google, SOGo, Horde or any other CalDAV or CardDAV server. Supported Outlook versions are 2016, 2013, 2010 and 2007.

Project Homepage

https://sourceforge.net/projects/outlookcaldavsynchronizer/

License

Affero GNU Public License

Authors

This project was initially developed as a master thesis project at the University of Applied Sciences Technikum Wien, Software Engineering Degree program. Outlook CalDav Synchronizer is Free and Open-Source Software (FOSS), still you can support the project by donating on Sourceforge or directly at Donate with Paypal.

Tested CalDAV Servers

  • SOGo
  • Horde Kronolith
  • OwnCloud
  • SabreDAV
  • Google Calendar
  • Zimbra 8.5
  • GroupOffice
  • Synology NAS
  • One.com
  • DAViCal
  • BaĂŻkal
  • Yandex
  • OpenX-change
  • Posteo
  • Landmarks
  • Kolab
  • Zoho Calendar
  • GMX

Features

  • open source AGPL, the only free Outlook CalDav plugin
  • two-way-sync
  • SSL/TLS support, support for self-signed certificates
  • Manual proxy configuration support for NTLM or basic auth proxies
  • Autodiscovery of calendars and addressbooks
  • configurable sync range
  • sync multiple calendars per profile
  • sync reminders, categories, recurrences with exceptions, importance, transparency
  • sync organizer and attendees and own response status
  • task support
  • CardDAV support to sync contacts (distribution lists planned)
  • time-triggered-sync
  • change-triggered-sync
  • manual-triggered-sync
  • Category Filtering (sync CalDAV calendar to Outlook categories)
  • map CalDAV server colors to Outlook category colors
  • show reports of last sync runs

Used Libraries

Install instructions

Download and extract the OutlookCalDavSynchronizer-<Version>.zip into the same folder and start setup.exe. If the installer is complaining about the missing Visual Studio 2010 Tools for Office Runtime, install it manually from Microsoft Download Link

Changelog

1.14.0

  • New features
    • Skip sync runs, if network is not available to avoid error reports in that case, add general option to check Internet connection with dns query to www.google.com. If you are in a local network without dns or google.com blocked, disable this option.
    • Implement EventMappingConfiguration options for syncing private flag to CLASS:CONFIDENTIAL and vice versa, feature request 15.
  • Bug fixes
    • Fix mapping outlook task dates to DTSTART and DUE, use local timezone and time 00:00:00 for start, 23:59:59 for due values and remove DURATION to be RFC 5545 compliant, see ticket #170. Use also localtime for COMPLETED instead of UTC to be consistent and fix VTIMEZONE DST rules for tasks.
    • Fix yearly recurrence with interval=1 for tasks.
    • Treat not recognized PARTSTAT same way as NEEDS-ACTION according to RFC 5545.
    • Fix mapping of attendees with type resource/room or unknown role, map X-LOCATION to type resource, set CUTYPE=RESOURCE for resources.
    • Catch COMException when setting recurrence interval and ignore invalid intervals for Appointments and Tasks, ticket #174.
    • Fix logging uid of events for recurrence errors.
    • Avoid COMException for invalid organizer in MapAttendeesAndOrganizer2To1, skip organizer if no email and no CN is valid.
    • Replace year 0001 with 1970 in VTIMEZONE definitions before deserializing icaldata, since DDay.iCal is extremely slow otherwise, needed for emClient, see ticket #150.

1.13.2

  • Bug fixes
    • Refactor SetOrganizer and GetMailUrl in EventEntityMapper to avoid Nullreference Exceptions and catch COMExceptions.
    • Catch COMExceptions when accessing timezone of AppointmentItem and fallback to UTC in that case.
    • Catch COMException when AppointmentItem of an Exception doesn't exist, ignore that exception then since we can't get the changes. This happens when the recurring event is not in the local Outlook timezone.
    • Set WordWrap in newFeaturesTextBox for better readability of new features, feature request 24.
    • Check for invalid DTEND of vevents and catch COMException when trying to set EndTime, use DTSTART in those cases.
    • Catch COMException in GetEventOrganizer(), fixes issues with OL2007.
    • Avoid possible NullReferenceExceptions in MapAttendeesandOrganizer2To1.
    • Catch possible COMException in MapOrganizer1To2.
    • Catch UriFormatException also in Map2To1 when the server sends invalid attendee email adresses, ticket #168.

1.13.0

  • New features
    • Support for GMX calendar, new events need to be created in UTC see section GMX in README.
    • Implement Show/Clear Log and log level configuration in General Options (feature 22).
    • Add also 1 min and 2 min to avaiable Sync Intervals since requested multiple times.
    • Add option to disable mapping of contact photos in ContactMappingConfiguration, since it is not working properly in OL 2007.
  • Bug fixes
    • EnsureSynchronizationContext on callbacks from Outlook, fixes errors when showing synchronization reports when synchronizung items immediately after changes.
    • Do not perform empty queries to repositories, fixes HTTP 400 errors with GMX.
    • Use PR_MESSAGE_CLASS to filter only AppointmentItems/TaskItems in OutlookRepositories, should fix casting errors when other items are in the folder.
    • Fix button layout in MappingConfiguration and OptionsDisplay.
    • Add EventMappingConfiguration to create events in UTC, needed for GMX for example, since local Windows Timezone leads to HTTP 403 error, ticket #162.
    • Catch System.UnauthorizedAccessExceptions in ContactEntityMapper.
    • Execute startup code just once, should fix error in ticket #161.
    • Avoid NullreferenceException when AdressEntry of recipient can't be fetched, ticket #163.

1.12.0

  • New features
    • Match added entities with every sync run, this should avoid duplicates and errors, when same event is added in both server and client e.g. a (autoaccepted) meeting invitation.
    • Add "Reset Cache" button to delete the sync cache and start a new initial sync with the next sync run.
    • Delete associated birthday appointment if deleting ContactItem in Outlook, feature #21.
    • Cleanup outdated synchronization reports with configurable timespan.
  • Bug fixes
    • Fix issues which might occur due to load behavior of controls.
    • Fix exporting of DateCompleted for tasks, according to the RFC it must be a DATE-TIME value, see ticket #156
    • Convert DateCompleted for tasks from UTC to local date when mapping back to Outlook.
    • Add Reports to ToolBar Buttons for OL2007.
    • Update Meeting Response only if MapAttendees is set in MappingConfiguration.
    • Fix yearly recurrence with interval=1, patch provided by Jonathan Westerholt, ticket #159
    • Revert "Use GlobalAppointmentID for new events instead of random Guid to avoid doubling events from invitations for own attendee". This caused problems with Google when recreating deleted events with same UID.
    • Cleanup outdated synchronization reports.
    • Add context menu which allows to open the cache directory also to Google profile type.
    • Select the new tab in OptionsForm when a new profile is added.

1.11.0

  • New features
    • Advanced Logging and configurable Synchronization Reports after each sync run. You can configure if reports should be generated for each sync run or only if errors or warnings occur and if the reports should be shown immediately after the sync run. You can also delete or zip reports from the Reports window.
    • Support for Zoho Calendar, patch provided from Suki Hirata thirata@outlook.com
  • Bug fixes
    • Factor out common mapping functions for events and tasks and map priority 1-9 according to RFC5545

1.10.0

  • New features
    • Add possibility to set server calendar color to selected category color
    • Allow to specify shortcut key of category and improve EventMappingConfiguration UI
    • Add scheduling configuration options to EventMappingConfiguration and set RSVP for attendees. (You can specify if you want to set SCHEDULE-AGENT:CLIENT or X-SOGO-SEND-APPOINTMENT-NOTIFICATIONS:NO for SOGo)
  • bug fixes
    • Escape single quotes in category filter string and validate it in EventMappingConfiguration, it must not contain commas or semicolons to avoid exceptions
    • Use DASL filter instead of JET syntax to fix category filtering for OL 2010(64bit)
    • Take relative redirects in account. (fixes Autodiscovery for some servers based on cpanel/horde)
    • Avoid UTC conversion from Dday.iCal library for upcoming reminder check.
    • Use GlobalAppointmentID for new events instead of random Guid to avoid doubling events from invitations for own attendee.

1.9.0

  • New features
    • Map CalDAV server colors to Outlook category colors. It is possible to choose the category color manually or fetch the color from the server and map it to the nearest supported Outlook color.
  • bug fixes
    • Don't use environment specific newline, in data sent to the server
    • Escape Uris, which are inserted into XML documents
    • Remove unused calDavReadWriteTimeout from config

1.8.0

  • New features
    • Add filtering on outlook side, so that multiple CalDAV-Calendars can be synchronized into one Outlook calendar via an Outlook category
    • Add mapping configuration options for Contacts (Enable or Disable mapping of Birthdays, feature #12)
    • Provide entity version (etag) on delete and set If-Match header
    • Add option to synchronize just upcoming reminders.
    • Autodiscovery improvemnts: Ignore xml Exceptions during Autodiscovery (needed for some wrong owncloud server paths) and try hostname without path too if well-known not available, fixes autodiscovery for posteo (https://posteo.de:8443), Display if no resources were found via well-known URLs
  • bug fixes
    • Filter out SOGo vlists (contenttype text/x-vlist) since we can't parse them atm, avoids syncing vlists to a empty vcard and destroying the vlist when syncing back to SOGo
    • Trim category names for events,tasks and contacts when mapping to caldav
    • Use ENCODING=b instead of BASE64 according to vcard 3.0 spec for binary attributes

1.7.0

  • New features
    • GUI redesign for Google profiles to simplify setup and autodiscovery for google accounts. When creating a new sync profile you can choose between a generic CalDAV/CardDAV and a google profile. For google it is sufficient to enter the Email address and autodiscovery will try to find resources once OAuth is configured.
    • Improvements in autodisovery logic
    • Calendar Colors are now shown in Autodiscovery SelectResourceForm, syncing colors to Outlook categories is work in progress.
    • Add group label to Ribbon and set ScreenTips and SuperTips
  • bug fixes
    • Clear ol phonenumbers before updating, fixes doubling of home and work numbers, ticket #142
    • Change TabIndex ordering, ticket #140
    • Delete profile cache also when username is changed, helps when google id is changed , ticket #141
    • Delete profile cache also when time range filter is modified or deactivated, ticket #138
    • Fix calDavDateTimeFormatString and use today instead of now to filter timerange
    • Add missing quotes to etags on system boundaries.

1.6.0

  • New features:
    • Provide entity version (etag) on update and set If-Match header
    • Implement own vCardImprovedWriter to fix serialization problems of vCardStandardWriter and avoid costly Regex workarounds
    • Add TYPE=HOME for personal homepages
  • bug fixes:
    • Fix mapping of HomeFaxNumber for vcards, ticket #134
    • Log Exceptions during ConnectionTests and don't try to list calendars or adressbooks for empty homesets, fixes github issue #82
    • Fix GetContacts for Yandex, since Yandex returns directory itself even with an etag
    • Improve error handling
    • Fixes TYPE subproperties needed for Yandex vcards
    • Ensure that Etag is double quoted when adding in Entity repositories, since some caldav servers like yandex send etags without quotes

1.5.4

  • New features:
    • General options in GUI for changing SSL options and other global settings
    • Add option to store state information in Appdata\Roaming instead of Local, Ticket #125
    • Add mapping configuration options for Appointments (Enable or Disable mapping of reminders, attendees or the description body)
    • Add Donate link to About Dialog
    • Add context menu to options , which allows to open the cache directory
  • bug fixes:
    • Fix mapping of ORG property to CompanyName and Department for vcards, ticket #127
    • Catch COM Exceptions when trying to add invalid Outlook items in repositories, ticket #130
    • Fix for unescaping relative urls for entity ids, ticket #129

1.5.3

  • Avoid Nullreference Exception which prevents syncing when there are no proxy settings in config file, bug #124
  • set correct mime type text/vcard when putting contacts

1.5.2

  • Delete profile cache, if outlook-folder or caldav-server-url is changed, ticket #117, prevents data loss and forces new inital sync in such cases
  • Fix for linebreak issues of OpenX-change, merged from pull request #79, thx to bjoernbusch

1.5.1

  • New features:
    • Support for proxy configuration in GUI to specify manual proxy settings and allow Basic Auth and NTLM proxies
  • bug fixes:
    • Use ContactItemWrapper and reload Items to avoid a second sync with a changed modification time in Outlook, see ticket #111
    • Avoid sending meeting response if meeting is self organized
    • Avoid unnecessary connection tests during autodiscovery, fixes Google CardDAV autodiscovery

1.5.0

  • New features:
    • Autodiscovery for CardDAV addressbooks
    • Change-triggered partial sync (Synchronize appointment items immediately after change in Outlook)
    • Support Yandex CalDAV server
    • Many improvements for CardDAV
    • Add OAuth Scope for Google CardDAV
  • bug fixes:
    • Fix syncing contact notes with umlauts
    • Disable TimeRangeFiltering when contact folder is chosen
    • Ensure that FN of vcard is not empty, since it is a MUST attribute (bug #109)
    • Map AccessClassification of vcards
    • Ensure that vcard UID is not empty also in Updates
    • Skip addressbook collection itself when fetching vcards from Owncloud
    • Use existing UID for filename in PUT requests
    • Get ETAG via propfind if it is not returned in header to avoid Null Reference
    • Check also for Write privilege when detecting calendar access rights
    • Map other vcard telephonenumber types
    • Honor RevisionDate in vcard Updates if available (bug #111)
    • Fix InitialEventEntityMatcher if DTEnd is null (bug #110)
    • Filter only ContactItems in ContactRepository GetTable to avoid COM Exceptions, since we don't sync groups or distribution lists at the moment
    • Avoid exception in Autodiscovery DoubleClick EventHandler when clicking the header

1.4.5

  • Fix regex in workaround for DDay.iCal timezone parsing, should fix bug #105 for syncing with Owncloud/Davdroid
  • Rework of exdate generation to work around some strange Outlook Exception Collection missing elements, fixes Bug #91 and other recurrence exceptions with complex patterns

1.4.4

  • Another fix for VTIMEZONE definition for Google, hopefully fixes US and Moscow timezone
  • Add UID when vCard is created, according to the RFC UID is mandatory
  • Another fix for recurrence exceptions and exdates for Bug #101
  • Handle exceptions when updating outlook folders or during profile loading at startup

1.4.3

  • Another DDay.iCal Workaround to fix VTIMEZONE generation for timezones wih changing DST rules like Moscow or Cairo
  • bugfix: Use timezone ID for comparison, avoid exporting double VTIMEZONE definitons
  • Options for not using keepalive and accepting invalid headers added

1.4.2

  • Use StartTimeZone and EndTimeZone of events if different to system timezone
  • Map server timezones to Windows Timezones and set time in StartTimeZone to fix recurring events which span DST shifts (fixes bug #94)
  • Fix many cases of mapping recurrence exceptions and finding them over DST changes or if Outlook and Server are in different timezones
  • Fix for bug #101, wrong exdate calculation
  • Fix originalDate calculation of recurrence exceptions if they are on previous day in UTC
  • Don't export historical timezone data before 1970

1.4.1

  • Add mapping of IMAddress for contacts
  • Add mapping of contact notes
  • Fix vcard mapping for fax numbers and address type other
  • Add doubleclick eventhandler for Autodiscovery
  • Fixed TestConnection behavior, so that cancelling Autodiscovery works
  • Add mapping of contact photos
  • Mapping of FormattedName for contacts
  • Add mapping for X509 certificates for contacts (e.g. S/MIME) to vCard KEY attribute
  • Implement EmailAddress Mapping for Exchange contacts (type "EX")

1.4.0

  • Initial CardDAV support to sync contacts (alpha)
  • Refactoring of Autodiscovery
  • Fix options and about buttons for Outlook 2007

1.3.4

  • Add support for Outlook 2007, credits to PierreMarieBaty (pull request #67)
  • Refactoring of Autodiscovery
  • Refactoring of url validation and test settings
  • Added option to automatically fix synchronization settings.
  • Avoid ArgumentOutOfRangeException in attendee email substring

1.3.3

  • Fix reminder timespan value

1.3.2

  • Fix reminders for google
  • Clarify test settings info for read-only resources and set Synchronization mode

1.3.1

  • Add guard to prevent that a SynchronizationWorker is running multiple times.
  • Fix priority mapping for tasks.
  • Initial implementation of recurring tasks.

1.3.0

  • Add support for Autodiscovery of CalDAV urls
  • Workaround: Since DDay.iCal is not capable to parse events, which contain unsorted TimeZoneComponents, they must be sorted before parsing.

1.2.2

  • Fixed bug in InitialEventEntityMatcher which caused a duplication of events, when a profile was deleted and recreated.
  • Catch UriFormatExceptions in attendee and organizer Values from CalDav.
  • Include response message in exception, if a protocol error occurs.

1.2.1

  • Fixed HttpClient redirect issue, which affected Zimbra integration

1.2.0

  • Added option to ignore new version and wait for next update.
  • Added workaround for Group Office, which will tolerate empty VALARMs.
  • Disable SynchronizeNowButton during synchronization.
  • Disable TestConnectionButton while test is in progress.
  • Add proper disposing for web messages.

1.1.0

  • Support for Google OAuth
  • Perform all web operations in the Background

1.0.4

-Fix TimeRange filter for events

1.0.3

  • Add feature, which checks if a newer version is available (Ticket 61)

1.0.2

  • Bugfix: Preserve UID when updating an Event.

0.99.16

  • Make filtering for time range optional

0.99.15

  • Implement app.config options for disabling SSL/TLS certificate validation and enabling/disabling SSL3/TLS12

0.99.14

  • Use BYSETPOS also for other instances from Outlook fixes first/second/... weekday/weekend day in month

0.99.13

  • Use BYSETPOS -1 to fix last (working)day monthly/yearly recurrences from Outlook
  • Add UserAgent header to request. (needed by BAIKAL for example)

0.99.12

  • Fix Bug: Mapping is wrong, when master event is not first event in CalDAV resource.
  • Fix logging issue
  • Fix recurrence from Outlook for last weekday in month

0.99.10

  • Fetch Etag from server, if it is not included in an update response.
  • Factor out CalDavWebClient from CalDavDataAccess.

0.99.9

  • Dispose Folders in OptionDialog
  • Call GarbageCollector after each synchronizer run to avoid issues with recurrence exceptions

0.99.8

  • Fix some caldav timeout issues, properly dispose WebRequests

0.99.7

  • Check if organizer address is empty to avoid COM Exception in GetMailUrl
  • Fix exdate calculation for moved recurrence exceptions

0.99.6

  • Catch 404 response for empty caldav repositories from Synology
  • Some generic Refactoring

0.99.4

  • Dispose Outlook-Folders after usage
  • Some more recurrence exception fixes:
  • If Outlook provides a Changed-Exception and a Deleted-Exception with the same OriginalDate the Deleted-Exception is discarded
  • Prevent skipping of Appointment-exceptions while moving
  • Swap handling of ExeptionDates and RecurrenceIDs
  • Clarify logging error
  • check if new exception is already present in target

0.99.3

  • Fix timezone definition

0.99.2

  • fix timezone issues for syncing from Outlook to CalDav for recurrent events
  • Add local timezone info to new CalDav events
  • Set start and end date in local timezone instead of utc for CalDav events
  • fixes recurrent events that span over daylight saving time changes
  • fix calculation of exdates for recurrence exceptions
  • Fix date calculation for GetOccurence
  • Honor BYSETPOS for monthly and yearly recurrence rules

0.99.1

  • Improved validation of calendar url in options dialog

0.99

  • Fixes for google

0.98

  • Add SCHEDULE-AGENT=CLIENT for organizer to avoid sending invitations twice in SOGo, see ticket 45

0.97.8

  • Add debug logging for caldav requests

0.97.7

  • more fixes for exchange email addresses for attendees and better logging
  • catch COM exception for not found recurrence exceptions

0.97.6

  • more fixes for GetMailUrl
  • Improve handling of WebExceptions

0.97.5

  • fixes for GetMailUrl for Exchange and GAL
  • fix WebException exceptions
  • response header 'location' is allowed to contain a relative Uri

0.97.3

  • fix interval for yearly recurrence rules

0.97.2

  • add synchronization context if missing
  • fix for task sync if start and due dates are equal

0.97.1

  • swap default values for sync timespans in options dialog
  • catch exceptions if PR_SMTP_ADDRESS property not available
  • set meetingstatus to nonmeeting if only own organizer and no attendees are present

0.97

  • Initial task sync support (alpha)
  • Make caldav requests async, Outlook UI stays responsive during caldav get requests
  • some recurrence fixes
  • improve total progress handling

0.96

  • Fixes for google

0.95.1

  • Fix getting smtp address for exchange users

0.95

  • Implement 301,302 redirects to support Zimbra
  • Add validation for options

0.94

  • Fix exception in initial mapping if event subject or summary is null

User Documentation

After installing the plugin, a new ribbon called 'Caldav Synchronizer' is added in Outlook with 5 menu items.

  • Synchronize now
  • Synchronization Profiles
  • General Options
  • About
  • Reports

Use the Synchronization Profiles dialog to configure different synchronization profiles. Each profile is responsible for synchronizing one Outlook calendar/task or contact folder with a remote folder of a CalDAV/CardDAV server.

  • Add adds a new empty profile
  • Delete deletes the current profile
  • Copy copies the current profile to a new one
  • Reset cache delete the sync cache and start a new initial sync with the next sync run.

When adding a new profile you can choose between a generic CalDAV/CardDAV and a google profile to simplify the google profile creation.

The following properties need to be set for a new generic profile:

  • Profile name: An arbitrary name for the profile, which will be displayed at the associated tab.
  • Server settings:
    • DAV Url: URL of the remote CalDAV or CardDAV server. You should use a HTTPS connection here for security reason! The Url must end with a / e.g. https://myserver.com/
    • If you only have a self signed certificate, add the self signed cert to the Local Computer Trusted Root Certification Authorities. You can import the cert by running the MMC as Administrator. If that fails, see section 'Advanced options'
    • Username: Username to connect to the CalDAV server
    • Password: Password used for the connection. The password will be saved encrypted in the option config file.
    • Use Google OAuth Used for Google instead of entering the Password, see section Google below
    • Email address: email address used as remote identity for the CalDAV server, necessary to synchronize the organizer
  • Outlook settings:
    • Outlook Folder: Outlook folder that should be used for synchronization
    • Synchronize items immediately after change Trigger a partial synchronization run immediately an item is created, changed or deleted in Outlook via the Inspector dialog, works only for Appointments at the moment!
  • Sync settings:
    • Synchronization settings
      • Outlook -> CalDav (Replicate): syncronizes everything from outlook to caldav server (one way)
      • Outlook <- CalDav (Replicate): synchronizes everything from caldav server to outlook (one way)
      • Outlook -> CalDav (Merge): synchronizes everything from outlook to caldav server but don't change events created in caldav server
      • Outlook <- CalDav (Merge): synchronizes everything from caldav server to outlook but don't change events created in outlook
      • Outlook <-> CalDav: 2-way synchronization between Outlook and CalDav server with one of the following conflict resolution
    • Conflict resolution (only used in 2-way synchronization mode)
      • Outlook Wins: If an event is modified in Outlook and in CalDav server since last snyc, use the Outlook version. If an event is modified in Outlook and deleted in CalDav server since last snyc, also use the Outlook version. If an event is deleted in Outlook and modified in CalDav server, also delete it in CalDav server.
      • Server Wins: If an event is modified in Outlook and in CalDav server since last snyc, use the CalDav server version. If an event is modified in Outlook and deleted in CalDav server since last snyc, also delete it in Outlook. If an event is deleted in Outlook and modified in CalDav server, recreate it in Outlook.
      • Automatic: If event is modified in Outlook and in CalDav server since last snyc, use the last recent modified version. If an event is modified in Outlook and deleted in CalDav server since last snyc, delete it also in Outlook. If an event is deleted in Outlook and modified in CalDav server, also delete it in CalDav server
    • Synchronization interval (minutes): Choose the interval for synchronization in minutes, if 'Manual only' is choosen, there is no automatic sync but you can use the 'Synchronize now' menu item.
    • Synchronization timespan past (days) and
    • Synchronization timespan future (days) For performance reasons it is useful to sync only a given timespan of a big calendar, especially past events are normally not necessary to sync after a given timespan
    • Deactivate If activated, current profile is not synced anymore without the need to delete the profile
  • Advanced Options: Here you can configure advanced network options and proxy settings.
    • Close connection after each request Don't use KeepAlive for servers which don't support it.
    • Use System Default Proxy Use proxy settings from Internet Explorer or config file, uses default credentials if available for NTLM authentication
    • Use manual proxy configuration Specify proxy URL as http://<your-proxy-domain>:<your-proxy-port> and optional Username and Password for Basic Authentication.
    • Mapping Configuration...: Here you can configure what properties should be synced, available for appointments and contacts at the moment.
      • For appointments you can choose if you want to map reminders (just upcoming, all or none) and the description body.
      • Create events on server in UTC: Use UTC instead of Outlook Appointment Timezone for creating events on CalDAV server. Needed for GMX for example. Not recommended for general use, because recurrence exceptions over DST changes can't be mapped and Appointments with different start and end timezones can't be represented.
      • In Privacy settings you can configure if you want to map Outlook private appointments to CLASS:CONFIDENTIAL and vice versa. This could be useful for Owncloud for example, if you share your calendar with others and they should see start/end dates of your private appointments.
      • In Scheduling settings you can configure if you want to map attendees and organizer and if notifications should be sent by the server. (Use *Don't send appointment notifications for SOGo servers and SCHEDULE-AGENT:CLIENT for other servers if you want to send invitations from Outlook and avoid that the server sends invitations too).
      • You can also define a filter category so that multiple CalDAV-Calendars can be synchronized into one Outlook calendar via the defined category (see Category Filter and Color below).
      • For contacts you can configure if birthdays should be mapped or not. If birthdays are mapped, Outlook also creates an recurring appointment for every contact with a defined birthday.
      • You can also configure if contact photos should be mapped or not. Contact photo mapping from Outlook to the server doesn't work in Outlook 2007.

Category Filter and Color

If you want to sync multiple CalDAV calendars into one Outlook folder you can configure an Outlook category for filtering in the Mapping Configuration... under Advanced Options. For all events from the server the defined category is added in Outlook, when syncing back from Outlook to the server only appointments with that category are considered but the filter category is removed. The category name must not contain any commas or semicolons!

It is possible to choose the color of the category or to fetch the calendar color from the server and map it to the nearest supported Outlook category color with the button Fetch Color. With Set DAV Color it is also possible to sync the choosen category color back to set the server calendar color accordingly.

Google Calender and Addressbook settings

For Google Calender you can use the new Google type profile which simplifies the setup. You just need to enter the email address of your google account. When testing the settings, you will be redirected to your browser to enter your Google Account password and grant access rights to your Google Calender and Contacts for OutlookCalDavSynchronizer via the safe OAuth protocol. After that Autodiscovery will try to find available calendar and addressbook resources. With the button 'Edit Url' you still can manually change the Url e.g. when you want to sync a shared google calendar from another account.

You can also still use the manual setup with a generic CalDAV/CardDAV profile type and the following settings: DAV Url: https://apidata.googleusercontent.com/caldav/v2/<your_google_calendar_id>/events/ Check the Use Google OAuth Checkbox instead of entering your password. When testing the settings, you will be redirected to your browser to enter your Google Account password and grant access rights to your Google Calender for OutlookCalDavSynchronizer via the safe OAuth protocol. For Autodiscovery of all available google calendars use the Url https://apidata.googleusercontent.com/caldav/v2/ and press the 'Test settings' button.

For Google Addressbook use the following settings: DAV Url: https://www.googleapis.com/carddav/v1/principals/<your_google_email>/lists/default/

Check the Use Google OAuth Checkbox instead of entering your password. When testing the settings, you will be redirected to your browser to enter your Google Account password and grant access rights to your Google Calender for OutlookCalDavSynchronizer via the safe OAuth protocol. If you get an error with insufficient access you need to refresh the token by deleting the previous token in C:\Users\<your Username>\AppData\Roaming\Google.Apis.Auth

GMX calendar settings

For GMX calendar use the DAV Url https://caldav.gmx.net Since GMX doesn't allow to create events with the Windows Timezone IDs, you must activate the Create events on server in UTC checkbox in Advanced options - Mapping Configuration to avoid erros when creating events and syncing from Outlook to GMX.

For GMX addressbook use the DAV Url https://carddav.gmx.net

Synology NAS settings

For Synology NAS with SSL support use port 5006 and the following settings in your NAS: In Synology DSM Navigate to control panel > Terminal & SNMP Select Enable SSH Then enter Advanced Settings and set it to High Now it will work on port 5006 with https.

Autodiscovery

You can use the exact calendar/addressbook URL or the principal url and use the 'Test settings' button in the option dialog to try to autodiscover available calendars and addressbooks on the server. You can then choose one of the found calendars or addressbooks in the new window. If your server has redirections for well-known Urls (./well-known/caldav/ and ./well-known/carddav/ ) you need to enter the server name only (without path).

Proxy Settings

You can now set manual proxy settings in the Advanced option dialog in each profile. To override the default proxy settings from Windows Internet Explorer you can also specify settings in the app config file, see config options below. More information can be found at https://msdn.microsoft.com/en-us/library/sa91de1e%28v=vs.110%29.aspx

General Options and SSL settings

In the General Options Dialog you can change settings which are used for all synchronization profiles.

  • Automatically check for newer versions set to false to disable checking for updates.
  • Check Internet connection before sync run checks if an interface is up and if www.google.com can be resolved with a DNS query before each sync run to avoid error reports if network is unavailable after hibernate for example. Disable this option if you are in a local network without DNS or google.com blocked.
  • Store data in roaming folder set to true if you need to store state and profile data in the AppData\Roaming\ directory for roaming profiles in a AD domain for example. When changing this option, a restart of Outlook is required.
  • Fix invalid settings Fixes invalid settings automatically, when synchronization profiles are edited.

If you have problems with SSL/TLS and self-signed certificates, you can change the following settings at your own risk. The recommended way would be to add the self signed cert to the Local Computer Trusted Root Certification Authorities You can import the cert by running the MMC as Administrator.

  • Disable Certificate Validation set to true to disable SSL/TLS certificate validation, major security risk, use with caution!
  • Enable Tls12 set to false to disable TLS12, not recommended
  • Enable Ssl3 set to true to enable deprecated SSLv3, major security risk, use with caution!

In the General Logging section you can show or clear the log file and define the log level. Possible log levels are INFO and DEBUG.

Reports of sync runs

You can also configure Synchronization reports for all profiles, this can be configured via general Options:

  • Log You can choose if you want to generate reports for "Only sync runs with errors" or "Sync runs with errors or warnings" or "All sync runs".
  • Show immediately configures if the Sync reports should be shown immediately after a sync run with errors, with warnings or errors, or not at all.
  • Delete reports older than (days) Automatically delete reports which are older than the days configured.

You can show reports manually with the Reports button in the CalDav Synchronizer Ribbon. There you can choose from available reports (shown as profile name with timestamp of the sync run) and see informations about items synced and if there were any warnings or errors. You can also delete reports or add them to a zip file via the context menu. If the last sync run lead to any errors, a warning symbol is shown in the Ribbon or the Report window opens if configured in the general options.

Trouble Shooting

Options and state information is normally stored in the following folder:

C:\Users\<Your Username>\AppData\Local\CalDavSychronizer

If you activated Store data in roaming folder the location is changed to the following folder:

C:\Users\<Your Username>\AppData\Roaming\CalDavSychronizer

There is one options_<your outlook profile>.xml file which stores the options for each outlook profile. For each sync profile there is a subfolder with state information stored in a relations.xml file after the inital sync. If you delete that folder, a fresh inital sync is performed. In the Synchronization profiles dialog a context menu is available in each profile (right click), which allows to open the cache directory and read the relations.xml file.

Each synchronization attempt is logged in the log.txt file. There you can find information about sync duration and the amount of added, deleted or modified events. Errors and Exceptions are logged aswell. You can view and clear the log file in General Options. There you can also change the log level from INFO to DEBUG.

Debugging and more config options

In the install dir (The default is 'C:\Program Files (x86)\Gerhard Zehetbauer\CalDavSynchronizer') you will find the app config file

CalDavSynchronizer.dll.config

In that xml file you can config timeout parameters and config options in the section appSettings After changing parameters you have to restart Outlook.

  • loadOperationThresholdForProgressDisplay: amount of sync operations to show the progress bar (default 50)
  • calDavConnectTimeout: timeout for caldav connects (default 90 sec)
  • enableTaskSynchronization Support for task sync true or false

In the section system.net you can define proxy settings, e.g. use of NTLM credentials

<defaultProxy useDefaultCredentials="true">
</defaultProxy>

In this section you can also allow UnsafeHeaderParsing if the server sends invalid http headers.

<system.net>
	<settings>
		<servicePointManager expect100Continue="false" />
		<httpWebRequest useUnsafeHeaderParsing="true" />
	</settings>
</system.net>

In the section log4net you can define the log level for the main log (also possible in general options now) and for the caldav data access, level value can be DEBUG or INFO, e.g. :

<root>
  <level value="DEBUG" />
  <appender-ref ref="MainLogAppender" />
</root>

Common network errors

  • System.Net.Http.HttpRequestException: Response status code does not indicate success: '401' ('Unauthorized').
    • Wrong Username and/or Password provided.
  • System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.WebException: The underlying connection was closed: A connection that was expected to be kept alive was closed by the server.
    • The server has KeepAlive disabled. Use "Close connection after each request" in Advanced Options.
  • System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.WebException: The server committed a protocol violation. Section=ResponseStatusLine
    • The server sends invalid headers. Enable the commented out option useUnsafeHeaderparsing in the app config file, see Debugging and more config options above.

About

Sync Outlook with Google, SOGo, Horde or any other CalDAV server

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C# 100.0%