When I started learning Flex I developed a simple application which will retrieve contacts from Gmail accounts. I thought I should share it so that anyone can use it.
Application features
1. Authenticates user with Gmail server
2. Retrieve contacts from Gmail
3. Parse the data returned by Gmail server and create typed objects
4. Allows user to select contacts
5. Once user is done selecting will throw an event with selected contacts as objects
Download Flex project from this URL: http://sujitreddy.g.googlepages.com/ImportContacts.zip
Please feel free to Copy/Update/Delete this code
Any suggestions are most welcome

December 11, 2008 at 4:29 pm
That sounds really handy – thanks for publishing that, Sujit!
December 11, 2008 at 7:51 pm
Nice! I’m gonna look into this and report back soon.
Thanks for the share.
December 27, 2008 at 2:10 pm
Thanks for sharing your code. I ran into a little problem, when i tried to retrieve my contacts, i had this error:
Error: Unknown Property: ‘address’.
at mx.collections::ListCollectionView/http://www.adobe.com/2006/actionscript/flash/proxy::getProperty()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\collections\ListCollectionView.as:694]
at com.adobe.contacts.contactsretrievers::GmailContactsRetriever/handleGetContactsFromServer()[C:\Users\fab\Documents\Flex Builder 3\ImportContacts\src\com\adobe\contacts\contactsretrievers\GmailContactsRetriever.as:99]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at mx.rpc.http.mxml::HTTPService/http://www.adobe.com/2006/flex/mx/internal::dispatchRpcEvent()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\rpc\http\mxml\HTTPService.as:290]
at mx.rpc::AbstractInvoker/http://www.adobe.com/2006/flex/mx/internal::resultHandler()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\rpc\AbstractInvoker.as:193]
at mx.rpc::Responder/result()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\rpc\Responder.as:43]
at mx.rpc::AsyncRequest/acknowledge()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\rpc\AsyncRequest.as:74]
at DirectHTTPMessageResponder/completeHandler()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\messaging\channels\DirectHTTPChannel.as:403]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()
After a little debugging, it appears that the line
contact.emailAddress = entries[i].email.address;(GMailContactsRetriever.as:line 100);
was corrupted. Actually, the problem was that one of my gmail contacts have two emails associated. So the email Object doesn’t contain directly an address property but two objects with the address property.
For a quick workaround, i just added (GMailContactsRetriever.as:line 99):
if (entries[i].email.length == undefined){
contact.emailAddress = entries[i].email.address;
contacts.addItem(contact);
}
It’s quite fast dirty and you should add another loop that would loop over the Objects inside “email” to add all the address but at least it worked and i could get my other contacts
Fabien
PS: If you create a new Air 1.5 Project into Flex Builder and copy-paste this code, think about changing the application descriptor ImportContacts-app.xml and change the first line to <application xmlns=”http://ns.adobe.com/air/application/1.5″> or it won’t lauch
December 27, 2008 at 2:16 pm
BTW, you should add this plugin to your wordpress:
http://www.semiologic.com/software/wp-tweaks/unfancy-quote/
it removes the curly quotes in the comments/texts so that it doesn’t mess the code when you copy/paste
Fabien
January 5, 2009 at 7:21 am
Hi Fabien,
Thanks for the suggestions
I will find time to clean up the code and post it. Thanks again
February 4, 2009 at 6:57 pm
How do you use this script?
I am trying to copy all my contacts so I can create a mass mailing list.
I have over 3,000 contacts in Gmail. HELP!
February 10, 2009 at 10:46 am
Hi Hari,
getContacts() function in GmailContactsRetriever class is the one that should be invoked. In the ContactsSelectionComponent.mxml, you will find getContacts() function, which is invoking the GmailContactsRetriever.
Hope this helps.
February 12, 2009 at 11:28 pm
The authentication works (which is very cool), but I’m getting a 401 Authentication required fault thrown on the getContactsFromServer() function.
Has Google changed some of their authentication requirements (very) recently that it might not work?
February 16, 2009 at 7:40 pm
Hi Ben,
Is this Flex application running on a Flash Player on browser? In that case that might be because of Flash Player blocking Authenticate headers and Google not having crossdomain.xml as required
Hope this helps.
June 29, 2009 at 3:41 pm
hi sujit,
Can you explain how to run this application,because it shows an error that (ContactsSelectionComponentEvent-not a compile time constant)
July 23, 2009 at 5:55 pm
This classes are made for a Desktop application.
What are the changes I have to make to access gmail via a Flex web application?
August 28, 2009 at 6:01 pm
Hi Patrick,
Gmail/Google server doesn’t have crossdomain policy file yet and so its not possible to get communicate with their servers from a web based Flash/Flex application.