Google Contacts via ActiveSync

Synchronizing Google Contacts via SyncML works, but is limited quite a bit by Google's incomplete vCard support. For example, birthday information does not sync because BDAY is not supported by Google's SyncML implementation. Using ActiveSync as protocol works better. This time the protocol and not so much its implementation are the limiting factor: ActiveSync only supports one cell phone number per contact. It does not distinguish between work and private email addresses and only syncs a limited number of them.

SyncEvolution supports ActiveSync in combination with activesyncd. activesyncd can provide access to email, contacts and events. This HOWTO focuses on the usage for contact syncing with Google.

Installation

Binaries of activesyncd and the SyncEvolution backend using it are provided as separate packages on syncevolution.org. In contrast to the normal SyncEvolution bundle packages, a Linux distribution like Debian Wheezy with Evolution 3.4 is required to run these binaries.

To install the .deb packages, add the "experimental" repository and run

aptitude install activesyncd syncevolution-activesync

.rpm and .tar.gz packages can be found in http://downloads.syncevolution.org/activesyncd resp. http://downloads.syncevolution.org/syncevolution.

Sanity checks

After installation, check that the new binaries work:

$ /usr/libexec/activesyncd
(process:14379:0x1147e00): activesyncd-DEBUG:activesyncd Daemon Started
(process:14379:0x1147e00): activesyncd-DEBUG:Creating eas_sync  gobject.
...

$ syncevolution --version
SyncEvolution 1.2.99.2+20120713+SE+15f2d03+unclean+SYSYNC+3ba7cb8 (pre-release)
using libedataserver-1.2.so.16
using libebook-1.2.so.13
using libebook-1.2.so.13
using libecal-1.2.so.11
using libecal-1.2.so.11
using libbluetooth.so.3
...
Loading backend library /usr/lib/syncevolution/backends/syncactivesync.so
...

$ syncevolution backend=?
'backend=?'
   Specifies the SyncEvolution backend and thus the
   data which is synchronized by this source.
   ...
   Currently active::

     ActiveSync Address Book = eas-contacts
     ActiveSync Events = eas-events
     ActiveSync Todos = eas-todos
     ActiveSync Memos = eas-memos
   ...

Todos and memos are mentioned, but do not work yet. If you don't get the expected output, then see the troubleshooting section below.

Configuration

activesyncd needs to be configured separately from SyncEvolution. It's settings are stored in gconf under /apps/activesyncd. To configure Google, use the following commands:

$ email=john.doe@gmail.com
$ gconftool --type string --set /apps/activesyncd/accounts/$email/serverUri \
            'https://m.google.com/Microsoft-Server-ActiveSync'
$ gconftool --type string --set /apps/activesyncd/accounts/$email/username \
            $email

Replace "john.doe@gmail.com" with your own email address at Google. It must be the main email address for the Google account, not some foreign email address added to it. Using the email address as account name in gconf is a convention in activesyncd; some other string could also be used.

activesyncd will run ssh-askpass to request a password the first time it needs it, then store the password in GNOME keyring for later use. If that password becomes invalid, activesyncd will ask again.

Here's how SyncEvolution is told about the Google ActiveSync service:

$ syncevolution --configure \
                syncURL= \
                username=$email \
                backend=eas-contacts \
                dumpData=0 \
                printChanges=0 \
                target-config@google-eas \
                addressbook

This creates a so-called "target configuration" that can be used to access the data in Google in a local sync where the other side is a local database. See the command line documentation for an explanation of these concepts.

To synchronize contacts, a second configuration, called "sync configuration" is needed:

$ syncevolution --configure \
                --template SyncEvolution_Client \
                syncURL=local://@google-eas \
                username= \
                sync=two-way \
                google-eas addressbook

This uses the default database for "addressbook" in the default context. See the KDE Wiki page for an explanation how that can be changed prior (or after) setting up this sync configuration. The name of the sync configuration ("google-eas") was chose so that it is identical to the context name in the target configuration. This is not required, the real link between the two configs is defined by the syncURL property.

Accessing and synchronizing data

To test the target-config@google-eas, one can show all contacts already on the server:

$ syncevolution --export - target-config@google-eas addressbook

This works without the sync configuration.

The command for running an actual sync is the same as for all sync configurations. The GTK UI can also be used to trigger the sync.

$ syncevolution google-eas

Google adds photo data to contacts that it recognizes. This photo data is sent to the client in future syncs.

Known Limitations

The ActiveSync data model is limited to the following fields per contact:

  • phone numbers: two home, two work, one cell, one home fax, one work fax, one car phone, one radio
  • addresses:
    • one home, one work, one other
    • the "PO box" part of an address is not supported
  • three email addresses without type information
  • three instance messaging handles (without type, and activesyncd does not support that yet)
  • birthday and anniversary (as UTC date + time, not just the date)
  • web page
  • nickname
  • pager
  • role (aka title)
  • photo
  • manager, assistant, spouse
  • company, department, office location
  • "file as" string
  • categories

ActiveSync does not have:

  • explicit full name
  • extended URL information:
    • blog (X-EVOLUTION-BLOG-URL)
    • calendar (CALURI)
    • free-busy (FBURL)
    • video chat (X-EVOLUTION-VIDEO-URL)
  • flag whether recipient wants HTML email (X-MOZILLA-HTML)
  • ordering of phone or email addresses (X-EVOLUTION-UI-SLOT)

Google's implementation has some restrictions not seen with Exchange:

  • The "file as" string is overwritten.
  • Photo data gets re-encoded on the server. Photos which are too large (for example, 640 pixels wide) can be stored, but are not shown by the Google web API.
  • Categories are lost.
  • Only the date part of a birthday or anniversary seems to be stored; this is similar to how Evolution works. ActiveSync forces both Google and SyncEvolution (resp. activesyncd) to add a time. SyncEvolution adds 00:00, as if the person was born on midnight UTC. It strips that time from incoming contacts and keeps other times. Google returns such contacts with a different time added to it, which can shift the date away from the right date.

Syncing will try to map all local data to these fields as good as it can. In some cases, for example phone numbers and addresses, this implies throwing away some type information. At the moment, SyncEvolution has no workaround for modified or lost information and will use the updated resp. cleared values when importing an updated contact from Google.

"refresh from local" and uploading many contacts is slow. The slowness is caused by inefficient use of the ActiveSync protocol (each change is a separate request) and will be addressed in future SyncEvolution releases (by batching changes in one request).

While talking to Google via ActiveSync, there is often no visible progress report. For example, a slow sync starts by downloading all contacts. That can take a while without even explaining that this operation is currently happening. Need to add more INFO messages to SyncEvolution.

In the Google web UI, deleted contacts (regardless whether they were deleted during an incremental or refresh sync) are still visible as "other contacts". They can be removed in the web UI.

Because a target config uses state information tied to the activesyncd account config, it is not possible to use multiple sync configurations with the same target. For the same reason, the command line --export operation on a target configuration breaks incremental syncing. Only use it when prepared to do a refresh or slow sync.

Dumping the entire content of the Google address book before and after a sync (dumpData and printChanges properties in the target config) is not possible. There are several reasons: during an incremental sync, the server only sends changes. It can be asked to start over and send all changes, but then the incremental sync no longer works. Requesting individual, unchanged contacts is supported by the ActiveSync protocol and activesyncd, but not implemented by Google.

Troubleshooting

If activesyncd fails to start, then missing libraries might be the reason. Check that "ldd /usr/libexec/activesyncd" does not mention any missing libraries.

To get a more complete log of events in activesyncd, run it with

EAS_SOUP_LOGGER=1 EAS_DEBUG=5 EAS_DEBUG_DETACHED_RECURRENCES=1 /usr/libexec/activesyncd

For similar reasons the SyncEvolution ActiveSync backend, syncactivesync.so, might fail to work. Check with

$ SYNCEVOLUTION_DEBUG=1 syncevolution --daemon=no --version

To check whether your data was uploaded correctly to the server and what kind of data might get lost when replacing local data with the server's copy, export the data to a file and run synccompare so that it ignores some known issues (like FN = full name and X-EVOLUTION-UI-SLOT):

Beware that this will break incremental syncing, be prepared for a slow or refresh sync.

$ syncevolution google-eas
...
$ syncevolution --export /tmp/google.vcf target-config@google-eas addressbook
$ syncevolution --export /tmp/local.vcf google-eas addressbook
$ CLIENT_TEST_STRIP_PARAMETERS=X-EVOLUTION-UI-SLOT \
  CLIENT_TEST_STRIP_PROPERTIES=FN \
  synccompare /tmp/local.vcf /tmp/google.vcf
...
$ syncevolution --sync slow google-eas

Comments

Hi, I am trying to setup a sync between my syncevolution/activesyncd and Hotmail ActiveSync Server (Since google_contact seem no longer support ActiveSync, so I use hotmail)

 Is there any guide to do so.

Currently my system is Ubuntu 13.10 Saucy, so I install activesyncd-saucy and syncevolution-activesync-saucy with below aptitude command on Ubuntu13.10

"sudo aptitude install activesyncd-saucy syncevoluion-activesync-saucy"

I can successfully install and below are my syncevolution version and backend command output. Then I try to use gconftool per describe in this document, somehow I cannot find /apps/activesyncd/accounts folder and fail when I execute below commands.

Is anyone can help to advice what I missing or any guide that can help me to sync with an ActiveSync server(hotmail), I appreciate for the Help, Thanks.

gconftool --type string --set /home/james/.gconf/accounts/kinghong0223@hotmail.com/serverUri 'https://m.hotmail.com/Microsoft-Server-ActiveSync'

Error setting value: Bad key or directory name: "/home/james/.gconf/accounts/kinghong0223@hotmail.com/serverUri": Can't have a period '.' right after a slash '/'

james@ubuntu:~$ syncevolution --version SyncEvolution 1.4 using libical.so.1 using libical.so.1 using libbluetooth.so.3 Loading backend library /usr/lib/syncevolution/backends/syncxmlrpc.so Loading backend library /usr/lib/syncevolution/backends/syncsqlite.so Loading backend library /usr/lib/syncevolution/backends/syncqtcontacts.so Loading backend library /usr/lib/syncevolution/backends/syncpbap.so Loading backend library /usr/lib/syncevolution/backends/syncmaemocal.so Loading backend library /usr/lib/syncevolution/backends/synckcalextended.so Loading backend library /usr/lib/syncevolution/backends/syncfile.so Loading backend library /usr/lib/syncevolution/backends/syncecal-3.so Loading backend library /usr/lib/syncevolution/backends/syncebook-2.so Loading backend library /usr/lib/syncevolution/backends/syncdav.so Loading backend library /usr/lib/syncevolution/backends/syncakonadi.so Loading backend library /usr/lib/syncevolution/backends/syncaddressbook.so Loading backend library /usr/lib/syncevolution/backends/syncactivesync.so Loading backend library /usr/lib/syncevolution/backends/providergoa.so Loading backend library /usr/lib/syncevolution/backends/platformkde.so Loading backend library /usr/lib/syncevolution/backends/platformgnome.so james@ubuntu:~$

james@ubuntu:~$ syncevolution backend=? 'backend=?' Specifies the SyncEvolution backend and thus the data which is synchronized by this source. Each backend may support multiple databases (see 'database' ....... ....... Currently active::

ActiveSync Address Book = eas-contacts
ActiveSync Events = eas-events
ActiveSync Todos = eas-todos
ActiveSync Memos = eas-memos

Best Regards James

Hi. I have figured out the gconftool issue(sorry for my previous mis-configure for gconftool) Somehow, I try with below command, but it seem fail to sync with hotmail.com. (I just replace https://m.google.com to https://m.hotmail.com and also google-eas change to hotmail-eas)

It show "Unsupported version header in the request", is that relative to that hotmail is run on EAS protocol 14.0?

Can you comment what EAS protocol of activesyncd is current running? (12.0, 12.1, 14.0 or 14.1?) or advice what additional step in order to sync with Hotmail? Thanks a lot!!!

james@ubuntu:~$ email=kinghong0223@hotmail.com

james@ubuntu:~$ gconftool --type string --set /apps/activesyncd/accounts/$email/serverUri 'https://m.hotmail.com/Microsoft-Server-ActiveSync' james@ubuntu:~$ james@ubuntu:~$ gconftool --type string --set /apps/activesyncd/accounts/$email/username $email james@ubuntu:~$ james@ubuntu:~$ james@ubuntu:~$ james@ubuntu:~$ syncevolution --configure syncURL= username=$email backend=eas-contacts dumpData=0 printChanges=0 target-config@hotmail-eas addressbook [INFO] addressbook: looking for databases... [INFO] addressbook: backend failed: fetching folder list: GDBus.Error:org.meego.activesyncd.Error.Failed: HTTP request failed: 400 - Unsupported version header in the request [ERROR] error code from SyncEvolution fatal error (local, status 10500): addressbook: backend failed: fetching folder list: GDBus.Error:org.meego.activesyncd.Error.Failed: HTTP request failed: 400 - Unsupported version header in the request james@ubuntu:~$ james@ubuntu:~$ syncevolution --configure --template SyncEvolution_Client syncURL=local://@hotmail-eas username= sync=two-way hotmail-eas addressbook [INFO] addressbook: looking for databases... [INFO] addressbook: okay james@ubuntu:~$ syncevolution --export - target-config@hotmail-eas addressbook [ERROR] error code from SyncEvolution error parsing config file (local, status 20010): addressbook: backend not supported by any of the backend modules (syncxmlrpc, syncsqlite, syncqtcontacts, syncpbap, syncmaemocal, synckcalextended, syncfile, syncecal-3, syncebook-2, syncdav, syncakonadi, syncaddressbook, syncactivesync, providergoa, platformkde, platformgnome) or not correctly configured (backend=select backend databaseFormat= syncFormat=) [ERROR] configuration 'target-config@hotmail-eas' does not exist [ERROR] source 'addressbook' does not exist [ERROR] backend property not set james@ubuntu:~$ syncevolution hotmail-eas [INFO] @default/calendar: inactive [INFO] @default/memo: inactive [INFO] @default/todo: inactive [ERROR] sending message to child failed: org.syncevolution.gdbuscxx.Exception: @hotmail-eas/addressbook: source not configured [INFO] Transport giving up after 0 retries and 0:00min [ERROR] transport problem: transport failed, retry period exceeded [INFO] creating complete data backup after sync (enabled with dumpData and needed for printChanges)

Synchronization failed, see /home/james/.cache/syncevolution/hotmail_+eas-2014-03-19-03-12/syncevolution-log.html for details.

Changes applied during synchronization: +---------------|-----------------------|-----------------------|-CON-+ | | @default | @hotmail-eas | FLI | | Source | NEW | MOD | DEL | ERR | NEW | MOD | DEL | ERR | CTS | +---------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+ | addressbook | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +---------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+ | start Wed 19 Mar 2014 03:12:40 AM PDT, duration 0:01min | | external transport failure (local, status 20043) | +---------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+ First ERROR encountered: sending message to child failed: org.syncevolution.gdbuscxx.Exception: @hotmail-eas/addressbook: source not configured

Here also provide activesyncd Debug Msg as below

ames@ubuntu:~$ /usr/libexec/activesyncd (process:4616:0x17ede00): activesyncd-DEBUG:activesyncd Daemon Started (process:4616:0x17ede00): activesyncd-DEBUG:Creating eas_sync gobject. (process:4616:0x17ede00): activesyncd-DEBUG:++ eas_sync_init() (process:4616:0x17ede00): activesyncd-DEBUG:-- eas_sync_init() (process:4616:0x17ede00): activesyncd-DEBUG:Creating common gobject. (process:4616:0x17ede00): activesyncd-DEBUG:eas_interface_base_class_init++ (process:4616:0x17ede00): activesyncd-DEBUG:eas_interface_base_class_init-- (process:4616:0x17ede00): activesyncd-DEBUG:eas_interface_base_init++ (process:4616:0x17ede00): activesyncd-DEBUG:eas_interface_base_init-- (process:4616:0x17ede00): activesyncd-DEBUG:Creating mail gobject. (process:4616:0x17ede00): activesyncd-DEBUG:eas_mail_class_init++ (process:4616:0x17ede00): activesyncd-DEBUG:eas_mail_class_init-- (process:4616:0x17ede00): activesyncd-DEBUG:eas_interface_base_init++ (process:4616:0x17ede00): activesyncd-DEBUG:eas_interface_base_init-- (process:4616:0x17ede00): activesyncd-DEBUG:eas_mail_init++ (process:4616:0x17ede00): activesyncd-DEBUG:eas_mail_init-- (process:4616:0x17ede00): activesyncd-DEBUG:eas_test_new++ (process:4616:0x17ede00): activesyncd-DEBUG:eas_test_class_init++ (process:4616:0x17ede00): activesyncd-DEBUG:eas_test_class_init-- (process:4616:0x17ede00): activesyncd-DEBUG:eas_test_init+- (process:4616:0x17ede00): activesyncd-DEBUG:eas_test_new-- (process:4616:0x17ede00): activesyncd-DEBUG:Connecting to the session DBus (process:4616:0x17ede00): activesyncd-DEBUG:Registering the well-known name (org.meego.activesyncd) (process:4616:0x17ede00): activesyncd-DEBUG:D-Bus RequestName RPC (process:4616:0x17ede00): activesyncd-DEBUG:RequestName returned 1 (process:4616:0x17ede00): activesyncd-DEBUG:Ready to serve requests (process:4616:0x17ede00): activesyncd-DEBUG:Not daemonizing (built with DISABLE_EAS_DAEMON) (process:4616:0x17ede00): activesyncd-DEBUG:eas_common_get_folders++ : account_uid[kinghong0223@hotmail.com] (process:4616:0x17ede00): libeas-DEBUG:eas_connection_find++ : account_uid[kinghong0223@hotmail.com] (process:4616:0x17ede00): libeas-DEBUG:eas_connection_accounts_init++ (process:4616:0x17ede00): libeas-DEBUG:-->created gconf_client (process:4616:0x17ede00): DEBUG:eas_account_list_new++ (process:4616:0x17ede00): DEBUG:eas_account_list_class_init++ (process:4616:0x17ede00): DEBUG:eas_account_list_class_init-- (process:4616:0x17ede00): DEBUG:eas_account_list_construct++ (process:4616:0x17ede00): DEBUG:gconf_accounts_changed++ (process:4616:0x17ede00): WARNING **:Unknown key: /apps/activesyncd/accounts/kinghong0223@hotmail.com/serviceUri (value: [https://m.hotmail.com/Microsoft-Server-ActiveSync])

(process:4616:0x17ede00): DEBUG:eas_account_new_from_info++ (process:4616:0x17ede00): DEBUG:eas_account_init++ (process:4616:0x17ede00): DEBUG:eas_account_init-- (process:4616:0x17ede00): DEBUG:eas_account_set_from_info++ (process:4616:0x17ede00): DEBUG:uid changed: [kinghong0223@hotmail.com]

(process:4616:0x17ede00): DEBUG:uri changed: [https://m.hotmail.com/Microsoft-Server-ActiveSync]

(process:4616:0x17ede00): DEBUG:username changed: [kinghong0223@hotmail.com]

(process:4616:0x17ede00): DEBUG:eas_account_set_device_id++ (process:4616:0x17ede00): DEBUG:eas_account_set_device_id-- (process:4616:0x17ede00): DEBUG:eas_account_set_server_protocols++ (process:4616:0x17ede00): DEBUG:server_protocols changed: (process:4616:0x17ede00): DEBUG:eas_account_set_server_protocols-- (process:4616:0x17ede00): DEBUG:eas_account_set_from_info-- (process:4616:0x17ede00): DEBUG:eas_account_new_from_info-- (process:4616:0x17ede00): DEBUG:gconf_accounts_changed-- (process:4616:0x17ede00): DEBUG:eas_account_list_construct-- (process:4616:0x17ede00): DEBUG:eas_account_list_new-- (process:4616:0x17ede00): libeas-DEBUG:-->created account_list (process:4616:0x17ede00): libeas-DEBUG:device type MeeGo, device id 469cb3cbcb6f0d2cfa77b1dcddedc25a (process:4616:0x17ede00): libeas-DEBUG:eas_connection_accounts_init-- (process:4616:0x17ede00): libeas-DEBUG:account->uid=kinghong0223@hotmail.com

(process:4616:0x17ede00): libeas-DEBUG:eas_connection_new++ (process:4616:0x17ede00): libeas-DEBUG:Checking for open connection (process:4616:0x17ede00): libeas-DEBUG:No existing connection, create new one (process:4616:0x17ede00): libeas-DEBUG:eas_connection_class_init++ (process:4616:0x17ede00): libeas-DEBUG:eas_connection_accounts_init++ (process:4616:0x17ede00): libeas-DEBUG:eas_connection_accounts_init-- (process:4616:0x17ede00): libeas-DEBUG:eas_connection_class_init-- (process:4616:0x17ede00): libeas-DEBUG:eas_connection_init++ (process:4616:0x17ede00): libeas-DEBUG:eas_connection_init-- (process:4616:0x17ede00): libeas-DEBUG:protocol version = 12.1 (process:4616:0x17ede00): DEBUG:Getting device_id (null) (process:4616:0x17ede00): libeas-DEBUG:Creating hashtable (process:4616:0x17ede00): libeas-DEBUG:Adding to hashtable (process:4616:0x17ede00): libeas-DEBUG:eas_connection_new-- (process:4616:0x17ede00): libeas-DEBUG:eas_connection_find (Created) -- (process:4616:0x17ff850): libeas-DEBUG: eas_connection - eas_soup_thread++ (process:4616:0x17ede00): libeas-DEBUG:eas_request_base_class_init++ (process:4616:0x17ede00): libeas-DEBUG:eas_request_base_class_init-- (process:4616:0x17ede00): libeas-DEBUG:eas_sync_folder_hierarchy_req_class_init++ (process:4616:0x17ede00): libeas-DEBUG:eas_sync_folder_hierarchy_req_class_init-- (process:4616:0x17ede00): libeas-DEBUG:eas_request_base_init++ (process:4616:0x17ede00): libeas-DEBUG:eas_request_base_init-- (process:4616:0x17ede00): libeas-DEBUG:eas_sync_folder_hierarchy_req_init++ (process:4616:0x17ede00): libeas-DEBUG:eas_request_base_SetRequestType++ (process:4616:0x17ede00): libeas-DEBUG:eas_request_base_SetRequestType-- (process:4616:0x17ede00): libeas-DEBUG:eas_sync_folder_hierarchy_req_init-- (process:4616:0x17ede00): libeas-DEBUG:eas_sync_folder_hierarchy_req_new++ (process:4616:0x17ede00): libeas-DEBUG:eas_request_base_SetContext++ (process:4616:0x17ede00): libeas-DEBUG:eas_request_base_SetContext-- (process:4616:0x17ede00): libeas-DEBUG:eas_sync_folder_hierarchy_req_new-- (process:4616:0x17ede00): libeas-DEBUG:eas_request_base_SetConnection++ [0x18050c0] (process:4616:0x17ede00): libeas-DEBUG:eas_request_base_SetConnection-- (process:4616:0x17ede00): libeas-DEBUG:eas_sync_folder_hierarchy_req_Activate++ (process:4616:0x17ede00): libeas-DEBUG:eas_msg_base_class_init++ (process:4616:0x17ede00): libeas-DEBUG:eas_msg_base_class_init-- (process:4616:0x17ede00): libeas-DEBUG:eas_sync_folder_msg_class_init++ (process:4616:0x17ede00): libeas-DEBUG:eas_sync_folder_msg_class_init-- (process:4616:0x17ede00): libeas-DEBUG:eas_msg_base_init++ (process:4616:0x17ede00): libeas-DEBUG:eas_msg_base_init-- (process:4616:0x17ede00): libeas-DEBUG:eas_sync_folder_msg_init++ (process:4616:0x17ede00): libeas-DEBUG:eas_sync_folder_msg_init-- (process:4616:0x17ede00): libeas-DEBUG:eas_request_base_SendRequest (process:4616:0x17ede00): libeas-DEBUG:eas_connection_send_request++ (process:4616:0x17ede00): DEBUG:Getting device_id (null) (process:4616:0x17ede00): libeas-DEBUG:eas_request_base_SetSoupMessage++ (process:4616:0x17ede00): libeas-DEBUG:eas_request_base_SetSoupMessage-- (process:4616:0x17ede00): libeas-DEBUG:eas_node_new++ (process:4616:0x17ede00): libeas-DEBUG:eas_node_new-- (process:4616:0x17ede00): libeas-DEBUG:eas_connection_send_request : job++ queuelength=1 (process:4616:0x17ede00): libeas-DEBUG:eas_trigger_next_request++ (process:4616:0x17ff850): libeas-DEBUG:eas_next_request++ (process:4616:0x17ff850): libeas-DEBUG:eas_next_request : job-- queuelength=0 (process:4616:0x17ff850): libeas-DEBUG:eas_next_request: active_job++ listlength=1 (process:4616:0x17ff850): libeas-DEBUG:eas_request_base_SoupMessage++ 182e130 (process:4616:0x17ff850): libeas-DEBUG:eas_next_request-- (process:4616:0x17ede00): libeas-DEBUG:eas_trigger_next_request-- (process:4616:0x17ede00): libeas-DEBUG:eas_connection_send_request-- (process:4616:0x17ede00): libeas-DEBUG:eas_sync_folder_hierarchy_req_Activate-- (process:4616:0x17ede00): activesyncd-DEBUG:eas_common_get_folders-- (process:4616:0x17ff850): libeas-DEBUG:soap_wrote_headers (process:4616:0x17ff850): libeas-DEBUG:soap_wrote_body_data 13 (process:4616:0x17ff850): libeas-DEBUG:Wrote 13 bytes for request 0x182b0e0 (process:4616:0x17ff850): libeas-DEBUG:soap_got_headers (process:4616:0x17ff850): libeas-DEBUG:eas_request_base_SetDataSize++ (process:4616:0x17ff850): libeas-DEBUG:eas_request_base_SetDataSize-- (process:4616:0x17ff850): libeas-DEBUG:Response size of request 0x182b0e0 is 0 bytes (process:4616:0x17ff850): libeas-DEBUG:eas_active_job_dequeue++ (process:4616:0x17ff850): libeas-DEBUG:eas_active_job_dequeue: queuelength=0 (process:4616:0x17ff850): libeas-DEBUG:eas_active_job_dequeue-- (process:4616:0x17ff850): libeas-DEBUG:eas_connection - handle_server_response++ node [0x1831260], req [0x182b0e0], self [0x18050c0], priv[0x1805030] (process:4616:0x17ff850): libeas-DEBUG:eas_connection - isResponseValid++ (process:4616:0x17ff850): libeas-*** CRITICAL ***:Failed with status [400] : Unsupported version header in the request (process:4616:0x17ff850): libeas-DEBUG: handle_server_response - no parsed provisioning required (process:4616:0x17ff850): libeas-DEBUG: handle_server_response - Handling request [2] (process:4616:0x17ff850): libeas-DEBUG:eas_request_base_MessageComplete+- (process:4616:0x17ff850): libeas-DEBUG:eas_sync_folder_hierarchy_req_MessageComplete-- (process:4616:0x17ff850): libeas-DEBUG:eas_sync_folder_hierarchy_req_dispose++ (process:4616:0x17ff850): libeas-DEBUG:eas_sync_folder_msg_dispose++ (process:4616:0x17ff850): libeas-DEBUG:eas_sync_folder_msg_dispose-- (process:4616:0x17ff850): libeas-DEBUG:eas_sync_folder_msg_finalize++ (process:4616:0x17ff850): libeas-DEBUG:eas_msg_base_finalize++ (process:4616:0x17ff850): libeas-DEBUG:eas_msg_base_finalize-- (process:4616:0x17ff850): libeas-DEBUG:eas_sync_folder_msg_finalize-- (process:4616:0x17ff850): libeas-DEBUG:eas_request_base_dispose++ (process:4616:0x17ff850): libeas-DEBUG:not unrefing connection (process:4616:0x17ff850): libeas-DEBUG:eas_request_base_dispose-- (process:4616:0x17ff850): libeas-DEBUG:eas_sync_folder_hierarchy_req_dispose-- (process:4616:0x17ff850): libeas-DEBUG:eas_sync_folder_hierarchy_req_finalize++ (process:4616:0x17ff850): libeas-DEBUG:eas_request_base_finalize++ (process:4616:0x17ff850): libeas-DEBUG:eas_request_base_finalize-- (process:4616:0x17ff850): libeas-DEBUG:eas_sync_folder_hierarchy_req_finalize-- (process:4616:0x17ff850): libeas-DEBUG:Queued mock responses [0] (process:4616:0x17ff850): libeas-DEBUG:eas_active_job_done++ (process:4616:0x17ff850): libeas-DEBUG:eas_trigger_next_request++ (process:4616:0x17ff850): libeas-DEBUG:eas_trigger_next_request-- (process:4616:0x17ff850): libeas-DEBUG:eas_active_job_done-- (process:4616:0x17ff850): libeas-DEBUG:eas_connection - handle_server_response-

I don't know exactly which EAS protocol versions will work with activesyncd. I've only tested with Exchange 2010, Exchange 2010 SP2, and Google.

Looks like some work will be needed to make it interact with Hotmail and/or more recent Exchange. Please file a feature request at https://bugzilla.gnome.org/enter_bug.cgi?product=evolution-activesync and CC me (patrick.ohly at gmx.de). But beware that there's probably no-one around at the moment to work on this.