将Outlook联系人转换为基于c#表单的应用程序

本文关键字:表单 应用程序 Outlook 联系人 转换 | 更新日期: 2023-09-27 18:16:41

我已经尝试将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联系人转换为基于c#表单的应用程序

这对我有用。它从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);
  }

我已经尝试了下面提到的代码来获取数据从Outlook到c#桌面应用程序在gridview。我有上面提到的API,并得到了Outlook的电子邮件地址,在您的系统上配置!代码粘贴在下面。

使用的API在outlook 20072003上工作良好,但对于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();
    }
}

这段代码在我的c#解决方案中运行良好。

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

有一个Microsoft Interop的解决方案,但是这会给没有安装Microsoft office的系统带来问题。所以我用微软的exchange服务解决了这个问题。现在我已经尝试了它在Asp。Net mvc,它工作得很好。这就是在Asp中获取联系人的方法。净

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

你只需要替换outlook用户名密码那里,这将给你的联系人。在没有联系人的情况下,我已经调用添加联系人方法添加一个。更多的参考资料,你可以看看我找到的这篇文章Microsoft Outlook添加联系人和获取联系人Asp。. Net MVC使用Microsoft Exchange Service