Reputation: 290
I have tried to get the contacts of Outlook contacts into C#, but it is not working. I have used the Microsoft Outlook 12.0 Object Library. I want to show the data in richtextbox or gridview.
The code is pasted below. Please let me know what I should do there.
private void getContacts_Click(object sender, EventArgs e)
{
// Obtain an instance of the Outlook application
Outlook.Application app = new Outlook.ApplicationClass();
// Access the MAPI namespace
Outlook.NameSpace ns = app.GetNamespace("MAPI");
// Get the user's default contacts folder
Outlook.MAPIFolder contacts =
ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts);
// Iterate through each contact
for (int i = 1; i < contacts.Items.Count + 1; i++)
{
// Get a contact
Outlook.ContactItem contact =
(Outlook.ContactItem)contacts.Items[i];
richTextBox1.Text += contact.FullName + " (" +
contact.BusinessTelephoneNumber + ")" + Environment.NewLine;
Application.DoEvents();
}
}
}
Upvotes: 6
Views: 18254
Reputation: 351
Well there is a solution with Microsoft Interop but that creates issue with systems where Microsoft office is not installed. So i solved it with Microsoft exchange service. For now i have tried it in Asp.Net mvc and it works fine. So this is how you can get contacts in Asp.Net
public void GetContact()
{
string ewsUrl = "https://outlook.office365.com/EWS/Exchange.asmx";
string userName = "outlookusername";
string password = "outlookpassword";
ExchangeService servicex = new ExchangeService();
servicex.Url = new Uri(ewsUrl);
servicex.UseDefaultCredentials = true;
servicex.Credentials = new WebCredentials(userName, password);
ContactsFolder contactsfolder = ContactsFolder.Bind(servicex, WellKnownFolderName.Contacts);
int numItems = contactsfolder.TotalCount < 50 ? contactsfolder.TotalCount : 50;
if (numItems == 0)
AddContact();
numItems = contactsfolder.TotalCount < 50 ? contactsfolder.TotalCount : 50;
// Instantiate the item view with the number of items to retrieve from the Contacts folder.
ItemView view = new ItemView(numItems);
// To keep the request smaller, request only the display name property.
view.PropertySet = new PropertySet(BasePropertySet.IdOnly, ContactSchema.DisplayName);
// Retrieve the items in the Contacts folder that have the properties that you selected.
FindItemsResults<Item> contactItems = servicex.FindItems(WellKnownFolderName.Contacts, view);
// Display the list of contacts.
foreach (Item item in contactItems)
{
if (item is Contact)
{
Contact contact = item as Contact;
Console.WriteLine(contact.DisplayName);
}
}
}`
you just have to replace outlook username password there and this will give you contacts. In case there are no contacts i have called Add Contact method for adding one.
Upvotes: 1
Reputation: 290
I have tried the below-mentioned code to fetch the data from Outlook to C# desktop application in gridview
. I have the above-mentioned API for that and got the email address of Outlook that is configured on your system! The code is pasted below.
The used API works fine with outlook 2007
and 2003
, but for outlook 2010
, it's suggested to use the other API.
public partial class Form1: Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
fetchOutlookContacts();
}
public void fetchOutlookContacts()
{
Microsoft.Office.Interop.Outlook.Items OutlookItems;
Microsoft.Office.Interop.Outlook.Application outlookObj;
MAPIFolder Folder_Contacts;
outlookObj = new Microsoft.Office.Interop.Outlook.Application();
Folder_Contacts = (MAPIFolder)outlookObj.Session.GetDefaultFolder(OlDefaultFolders.olFolderContacts);
OutlookItems = Folder_Contacts.Items;
DataTable dt = new DataTable();
dt.Columns.Add("Email Address");
for (int i = 0; i < OutlookItems.Count; i++)
{
Microsoft.Office.Interop.Outlook.ContactItem contact = (Microsoft.Office.Interop.Outlook.ContactItem)OutlookItems[i + 1];
dt.Rows.Add(new object[] { contact.Email1Address });
}
dataGridView1.DataSource = dt;
dataGridView1.Show();
}
}
Upvotes: 3
Reputation: 21
This code is working fine in my C#-Solution.
using Outlook =Microsoft.Office.Interop.Outlook;
private void kontaktImport_Click(object sender, RoutedEventArgs e)
{
Outlook.Application app = new Outlook.Application();
Outlook.NameSpace NameSpace = app.GetNamespace("MAPI");
Outlook.MAPIFolder ContactsFolder = NameSpace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts);
Outlook.Items ContactItems = ContactsFolder.Items;
try
{
foreach (Outlook.ContactItem item in ContactItems)
{
String output = "";
output = item.FirstName + "\n";
output += item.LastName;
TestTextBox.Text = output;
}
}
catch (System.Runtime.InteropServices.COMException ex)
{
TestTextBox.Text = ex.ToString();
}
}
Upvotes: 2
Reputation: 1199
This works for me. It gets all the contacts from outlook and shows it in datagridview.
Microsoft.Office.Interop.Outlook.Items OutlookItems;
Microsoft.Office.Interop.Outlook.Application outlookObj = new Microsoft.Office.Interop.Outlook.Application();
MAPIFolder Folder_Contacts;
Folder_Contacts = (MAPIFolder)outlookObj.Session.GetDefaultFolder(OlDefaultFolders.olFolderContacts);
OutlookItems = Folder_Contacts.Items;
MessageBox.Show("Wykryto kontaktów: " + OutlookItems.Count.ToString());
for (int i = 0; i < OutlookItems.Count; i++)
{
Microsoft.Office.Interop.Outlook.ContactItem contact = (Microsoft.Office.Interop.Outlook.ContactItem)OutlookItems[i+1];
sNazwa = contact.FullName;
sFirma = contact.CompanyName;
sAdress = contact.BusinessAddressStreet;
sMiejscowosc = contact.BusinessAddressPostalCode + " " + contact.BusinessAddressCity;
sEmail = contact.Email1Address;
dataGridView1.Rows.Add(sNazwa, sFirma, sAdress, sMiejscowosc, sEmail);
}
Upvotes: 7