Calendar and Contacts Migration

Revision as of 01:58, 17 December 2010 by Glenno (talk | contribs) (Migrating via REST)

Migrating Contacts

So far, these are step-by-step one-off, per-user migrations.

Outlook 2003/2007

If you bought Zimbra Network Edition, then use the ZCS Connector for Outlook for your Outlook 2003+ mail clients. If you're on then open source version ...



  • In Eudora, select the Address Book that you wish to import to Zimbra. (Select Tools/Address Book) and then Click on the correct Book.
  • Select File/Save As, Save as type: CSV Files (*.csv) and type in an appropriate file name. Click Save
  • Open Notepad, Open the file.csv that you saved in step 2.
  • Insert the following line EXACTLY. (Must be the first line in the file.) nickname,email,fullName,firstName,lastName,homeStreet,homeCity,homeState,homeCountry,homePostalCode,homePhone,homeFax,homePhone2,homeURL,company,jobTitle,workStreet,workCity,workState,workCountry,workPostalCode,workPhone,workFax,workPhone2,workURL,email2,otherPhone,otherURL,notes
  • (Make sure to press enter after the above line and save and close notepad.)
  • Login to Zimbra, and go to Options/Address Book, Click Browse and select the file. Click import.
  • Select the address book to import into or select New to create new address book. Wait until box in bottom left hand corner says import complete.
  • Click Address Book and make sure the contacts imported.

Migrating via REST

If your mail migration strategy doesn't cover contacts and calendar, you can import via the REST interface. Currently, contacts and calendar are only imported with the Exchange migration tool and the PST Import Wizard, so this applies to most IMAP migrations.


The basic procedure is this:

  1. Export calendar or contact data from your existing server into a csv or ics file
  2. Migrate that data file to a host that can access the zimbra server
  3. Use the REST interface to insert the data into Zimbra

Today, within the Zimbra Collaboration Suite we have a number of different server-side URLs that our client accesses to download an attachment, export contacts as CSV, export a calendar as an ICS, file etc. We are also adding sharing (what would collaboration be without sharing, after all) of calendars, contacts, etc. Not only within a particular Zimbra community, but between Zimbra communities and the public at large.

In order to facilitate this, we are coming up with a clean, consistent URL interface to all our resources. The best way to describe this is with some examples.

Lets say I want access to my calendar folder from within iCal. The URL would look like:


The default format on calendar folders is ICS, so no need to specify the format.

Lets say I want to export my contacts folder so I can import them into another account:


Contact folders have a default type of CSV, so like calendars, no need to specify the format.

How about an RSS feed of unread messages in my inbox:


By specifying an extension of ".rss" on the inbox folder, the server will automatically generate an RSS feed on it. Adding the "query" parameter lets me further refine what gets returned. You can also specify "?fmt=rss" instead of using the ".rss" extension if you'd like. You can also use the encoding for double quotes, %22 (For example, inbox.rss?query=%22is:unread%22)

Lets do something a little more interesting. How about a zip file containing all messages in my talks/ajax folder:


The server zips them all up and returns the zip file.

Another interesting example is say you have created a public calendar that you want to share with everyone. Once you have granted access to the calendar, it is up to the consumer to chose what format they want to view it in:


How about accessing another user's calendar/folder? Once they grant you access, you can use the same exact syntax:


One last interesting example to leave you with. Lets say you have a friend at who you know is running Zimbra and who has shared their calendar with you, but you don't know the name of their public Zimbra server. As long as they publish some DNS SRV records for, then you can access it directly from your Zimbra without needing to know his server's address:


This last format ( is also necessary when accessing resources in a non-default domain on your local Zimbra server.

REST file formats

see this reference page: REST File Formats

Importing into Zimbra

We've added the ability to update/create content by POST'ing content to REST urls. GETs continue to remain read only, with no side-effects (as they should be).

For example, you can POST an RFC822 formatted message to your inbox REST url to append messages to the inbox folder. Using the popular curl program, this would look like the following:

 curl -u schemers:password --upload-file /tmp/rfc822.txt https://server/service/home/schemers/inbox

Note, you currently have to use /service/home for POSTs instead of /zimbra/home, because /zimbra/home issues a redirect, which isn't allowed with POSTs. We'll be fixing that in an upcoming release.

Other items that can be updated this way are calendar appointments (ICS), and contacts (csv and the new vcf (vCard) format):

 curl -u username:password --upload-file /tmp/new.csv http://server/service/home/username/contacts?fmt=csv
 curl -u username:password --upload-file /tmp/new.ics http://server/service/home/username/calendar?fmt=ics
 curl -u username:password --upload-file /tmp/new.vcf http://server/service/home/username/contacts?fmt=vcf

The full user name ( is required when importing to resources on a non-default domain on your local Zimbra server.

NOTE - this works for resource accounts as well.

The target "contacts" in the above command corresponds to the actual folder name on the Zimbra server, rather than a service. This means that you can import to user-defined folders by specifying the appropriate target name in the command. If you have created a folder named "SharedContacts", for example, the command to import into this folder would be

 curl -u username:password --upload-file /tmp/new.csv http://server/service/home/username/sharedcontacts?fmt=csv

On earlier version's (such as 5.0.10 and earlier) instead of --upload-file , you should use --data-binary.

For example:

curl --insecure -u admin:password --data-binary @/tmp/test.csv

Alternatively, you can use zmmailbox pru:

zmmailbox -z -m pru /Contacts /tmp/test.csv

Additional Resources

Verified Against: unknown Date Created: 4/26/2009
Article ID: Date Modified: 2010-12-17

Try Zimbra

Try Zimbra Collaboration with a 60-day free trial.
Get it now »

Want to get involved?

You can contribute in the Community, Wiki, Code, or development of Zimlets.
Find out more. »

Looking for a Video?

Visit our YouTube channel to get the latest webinars, technology news, product overviews, and so much more.
Go to the YouTube channel »

Jump to: navigation, search