将Outlook联系人获取到基于C#表单的应用程序中

我试图将Outlook联系人的联系人转换为C#,但它无法正常工作。 我使用过Microsoft Outlook 12.0对象库。 我想在richtextbox或gridview中显示数据。

代码粘贴在下面。 请让我知道我应该在那里做什么。

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(); } } } 

这对我有用。 它从outlook获取所有联系人并在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); } 

这段代码在我的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(); } } 

我已经尝试了下面提到的代码来从gridview中将数据从Outlook提取到C#桌面应用程序。 我有上面提到的API,并获得了在您的系统上配置的Outlook的电子邮件地址! 代码粘贴在下面。 使用的API适用于Outlook 2007和2003,但对于outlook 2010,建议使用其他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(); } }