I had some old personal email accounts that I wanted to copy over to GMail so that they would be more easily searchable. There is a script called imapsync that makes this easy. You can get this script from either Debian ports and macports.
The command line that I used was something like (fill in the variables indicated by $). It was for moving from the old account to gmail.
imapsync --host1 $UNI_HOST_NAME --user1 $UNI_USER_NAME --port1 993 --authmech1 PLAIN --noauthmd5 --syncinternaldates --user2 $GOOGLE_USER_NAME --host2 imap.gmail.com --port2 993 --ssl1 --ssl2 --useheader Message-Id --folder $NAME_OF_IMAP_FOLDER --skipsize --password1 $UNI_PASSWD --password2 $GOOG_PASSWD --regextrans2 's/INBOX/All Mail/'
I stuck this within a shell script that iterator over all of my folders on the from side. GMail automatically maps labels to folders in its IMAP implementation. There are a few idiosyncracies in this mapping that I don't remember.