Получить контакты 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();
}
}
}
3 ответа
Это работает для меня. Он получает все контакты из внешнего вида и показывает его в 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 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();
}
}
Этот код работает нормально в моем 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();
}
}
Что ж, есть решение с Microsoft Interop, но это создает проблемы с системами, в которых не установлен Microsoft Office. Я решил это с помощью службы обмена Microsoft. На данный момент я попробовал его в Asp.Net mvc, и он отлично работает. Вот как можно получить контакты в 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);
}
}
}`
вам просто нужно заменить пароль для имени пользователя Outlook, и это даст вам контакты. В случае, если контактов нет, я вызвал метод добавления контакта для добавления контакта. Для получения дополнительной информации вы можете посмотреть эту статью, я нашел Microsoft Outlook Добавить контакт и получить контакт Asp.Net MVC с помощью службы Microsoft Exchange.