Although neither POP3 nor IMAP protocol allows retrieving the list of user’s contacts, it is possible to use Google API for that.
As long as you are using one of OAuth 2.0 scenarios:
- OAuth 2.0 with Gmail over IMAP for web applications
- OAuth 2.0 with Gmail over IMAP for installed applications
Mail.dll email component allows you to easy download Gmail contacts of a particular user.
Remember to add request for calendar data access using GoogleScope.ContactsScope.
// C# List<GoogleScope> scope = new List<GoogleScope> { GoogleScope.ImapAndSmtp.Name, GoogleScope.EmailAddressScope, GoogleScope.ContactsScope };
' VB.NET Dim scope As New List(Of GoogleScope)() { _ GoogleScope.ImapAndSmtp.Name, _ GoogleScope.EmailAddressScope, _ GoogleScope.ContactsScope _ }
// C# GoogleApi api = new GoogleApi(accessToken); XmlDocument contacts = google.GetContacts(); XmlNamespaceManager nsmgr = new XmlNamespaceManager(contacts.NameTable); nsmgr.AddNamespace("gd", "http://schemas.google.com/g/2005"); nsmgr.AddNamespace("a", "http://www.w3.org/2005/Atom"); foreach (XmlNode contact in contacts.GetElementsByTagName("entry")) { XmlNode title = contact.SelectSingleNode("a:title", nsmgr); XmlNode email = contact.SelectSingleNode("gd:email", nsmgr); Console.WriteLine("{0}: {1}", title.InnerText, email.Attributes["address"].Value); }
' VB.NET Dim google As New GoogleApiaccessToken) Dim contacts As XmlDocument = google.GetContacts() Dim nsmgr As New XmlNamespaceManager(contacts.NameTable) nsmgr.AddNamespace("gd", "http://schemas.google.com/g/2005") nsmgr.AddNamespace("a", "http://www.w3.org/2005/Atom") For Each contact As XmlNode In contacts.GetElementsByTagName("entry") Dim title As XmlNode = contact.SelectSingleNode("a:title", nsmgr) Dim email As XmlNode = contact.SelectSingleNode("gd:email", nsmgr) Console.WriteLine("{0}: {1}", _ title.InnerText, _ email.Attributes("address").Value) Next