I still have a perfectly working Windows Mobile PDA-phone. I use a program called PIM Backup to make backups of the databases such as calls, SMSes (text messages), contacts, calendar, …. The program can generate either a binary backup, or a more readable backup. I use the latter one, so I could unpack the backup on my desktop computer and use it as an archive. The generated backup files have a .pib extension. The file itself is a ZIP-file containing the different parts of the backup (calls, contacts, …) as separate files.

The text messages (SMS)

The text messages are in the file “msgs_.csm”. This file is encoded in UTF-16 and is contains Comma Seperated Values (CSV), well actually its semicolon separated, as the header describes (the following is a single line, but has been split into multiple lines for readability):

Msg Id;Sender Name;Sender Address;Sender AddressType;Prefix;Subject;Body;BodyType;Folder;Account;
Msg Class;Content Length;Msg Size;Msg Flags;Msg Status;Modify Time;Delivery Time;Recipient Nbr;
Recipients;Attachment Nbr;Attachments

I didn’t figure out what exactly every field means, but here are my findings:

  • Folder “\%MDF1” is Inbox; “\%MDF3” is Sent
  • The Time fields are encoded “YYYY,MM,DD,hh,mm,ss”
  • Recipients contains a series of fields; the second and third seem to be name and number, I didn’t identify the others.

I use this perl script to convert from the messages inside the PIB file to a Maildir-like structure, writing an email-like file for every message in the backup:

From: +32496______
To:  <>
Date: 01 Jan 2009 00:07:32
Subject: SMS
Content-Type: text/plain; charset=UTF8

___ message ___

I usually just drop this folder into my IMAP-mailserver directory and browse my SMSes using Thunderbird.

The call log

The format is similar to the text messages: an UTF-16 CSV file but this time without an helpful header. I also wrote a perl script which converts this to a standard CSV-file with headers. There is some documentation inside the script on the fields I figured out.