C# WinForm 如何点击一按钮,则自动地将outlook中的通讯录名单及邮箱地址全部列在ListBox框中?望指教,谢谢!

于之 2014-09-06 03:43:16
C# WinForm 如何点击一按钮,则自动地将outlook中的通讯录名单及邮箱地址全部列在ListBox框中?望指教,谢谢!

我下面这段代码只是把我已经收到的邮件名单列出来,

private void button3_Click(object sender, EventArgs e)
{
try
{
ns = ac.GetNamespace("MAPI");
//使用对应账号,密码登陆相应邮箱
//ns.Logon("", "", false, true);
}
catch (System.Exception error)
{
throw new System.Exception("登陆Outlook失败" + error.Message);
}
MAPIFolder inbox = ns.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
//邮箱中的所有数目
int count = inbox.Items.Count;
//收件人
string Receiver = ""; //当前收件人
Recipients recipients; //全部收件人集合
//收件人数目
int intReceiverCount;
foreach (Object obj in inbox.Items)
{
MailItem item = obj as MailItem;
Receiver = item.ReceivedByName;
//收件人群体集合
recipients = item.Recipients;
//收件人数目
intReceiverCount = recipients.Count;
foreach (Recipient receipient in recipients)
{
//ReceiverAll = ReceiverAll + receipient.Name + ";";
listBox1.Items.Add(receipient.Name);
}
}

}

而我不要以上这个已经收过的邮件人名单,而是要outlook中通讯录中的名单所有。

请大家帮帮忙,谢谢!
...全文
1097 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
米粒suming 2014-09-11
  • 打赏
  • 举报
回复
引用 5 楼 limx001 的回复:
以上各位大侠,我改成如下:

MAPIFolder myFolder = myNameSpace.GetDefaultFolder(OlDefaultFolders.olFolderContacts);
int iMailCount = myFolder.Items.Count;
//Microsoft.Office.Interop.Outlook.Items contactItems = myNameSpace.Session.GetDefaultFolder(OlDefaultFolders.olFolderContacts).Items;
for (int k = 1; k <= iMailCount-1; k++)
{
ContactItem Item = (ContactItem)myFolder.Items[k];
string name = Item.FirstName;
string email = Item.Email1Address;
listBox1.Items.Add(Item.LastName + name + email);
}

但是运行时,前面会取出这些名单,但是过一会儿就会弹出一个错误如下:
无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Outlook.ContactItem”。此操作失败的原因是对 IID 为“{00063021-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 不支持此接口 (异常来自 HRESULT:0x80004002 (E_NOINTERFACE))。


请再指点,谢谢!


尝试一下在解决方案里面添加引用
save4me 2014-09-10
  • 打赏
  • 举报
回复
上面给的参考链接里有获取所有联系的人代码,下面的是一个控制台程序,测试过可以获取所有联系人。 可以把下面的GetContact函数里的Console.WriteLine改成listBox1.Items.Add用到你的程序试试。

using System;
using OutlookInterop = Microsoft.Office.Interop.Outlook;

namespace OutlookContact
{
	class Program
	{
		public static void Main(string[] args)
		{
			GetContact();
			Console.Write("Press any key to continue . . . ");
			Console.ReadKey(true);
		}
		
		public static void GetContact()
		{			
			// create new instance of the Outlook app
			OutlookInterop.ApplicationClass app = new OutlookInterop.ApplicationClass();
			// get path to the MAPI api
			OutlookInterop.NameSpace ns = app.GetNamespace("MAPI");
			
			// get path to the contacts folder.  Use the OlDefaultFolders enum to specify
			// that we want to get the olFolderContacts folder.
			OutlookInterop.MAPIFolder contactsFolder = app.ActiveExplorer().Session.GetDefaultFolder(
				OutlookInterop.OlDefaultFolders.olFolderContacts);
						
			// Get list of all contacts in Outlook.
			OutlookInterop.Items contactItems = contactsFolder.Items;
			// loop the list of contacts returned
			foreach (OutlookInterop.ContactItem Item in contactItems)
			{
				// do something with each contact
				string sFirstName = Item.FirstName;
				string sLastname = Item.LastName;
				string sEmail = Item.Email1Address;
				Console.WriteLine(string.Format("{0} {1} {2}", sFirstName, sLastname, sEmail));
			}
		}
	}
}
引用 5 楼 limx001 的回复:
以上各位大侠,我改成如下: MAPIFolder myFolder = myNameSpace.GetDefaultFolder(OlDefaultFolders.olFolderContacts); int iMailCount = myFolder.Items.Count; //Microsoft.Office.Interop.Outlook.Items contactItems = myNameSpace.Session.GetDefaultFolder(OlDefaultFolders.olFolderContacts).Items; for (int k = 1; k <= iMailCount-1; k++) { ContactItem Item = (ContactItem)myFolder.Items[k]; string name = Item.FirstName; string email = Item.Email1Address; listBox1.Items.Add(Item.LastName + name + email); } 但是运行时,前面会取出这些名单,但是过一会儿就会弹出一个错误如下: 无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Outlook.ContactItem”。此操作失败的原因是对 IID 为“{00063021-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 不支持此接口 (异常来自 HRESULT:0x80004002 (E_NOINTERFACE))。 请再指点,谢谢!
于之 2014-09-10
  • 打赏
  • 举报
回复
以上各位大侠,我改成如下: MAPIFolder myFolder = myNameSpace.GetDefaultFolder(OlDefaultFolders.olFolderContacts); int iMailCount = myFolder.Items.Count; //Microsoft.Office.Interop.Outlook.Items contactItems = myNameSpace.Session.GetDefaultFolder(OlDefaultFolders.olFolderContacts).Items; for (int k = 1; k <= iMailCount-1; k++) { ContactItem Item = (ContactItem)myFolder.Items[k]; string name = Item.FirstName; string email = Item.Email1Address; listBox1.Items.Add(Item.LastName + name + email); } 但是运行时,前面会取出这些名单,但是过一会儿就会弹出一个错误如下: 无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Outlook.ContactItem”。此操作失败的原因是对 IID 为“{00063021-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 不支持此接口 (异常来自 HRESULT:0x80004002 (E_NOINTERFACE))。 请再指点,谢谢!
save4me 2014-09-10
  • 打赏
  • 举报
回复
参考: 无法将类型为“Microsoft.Office.Interop.Excel.ApplicationClass”的COM 对象强制转换为接口类型“Microsoft.Office.Interop.Excel._Application” 00020970-0000-0000-C000-000000000046
引用
出现的原因可能是安装office时安装过不同版本造成的
删除相应的注册表信息,注意删除前备份一下,以防万一。
引用 8 楼 limx001 的回复:
TO: Save4me 谢谢你的帮助,但是运行时,仍然会出现: 无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Outlook.ContactItem”。此操作失败的原因是对 IID 为“{00063021-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 不支持此接口 (异常来自 HRESULT:0x80004002 (E_NOINTERFACE))。 这个错误!即在运行过程中会出现这个错误,请再帮忙看看,谢谢!
于之 2014-09-10
  • 打赏
  • 举报
回复
TO: Save4me 谢谢你的帮助,但是运行时,仍然会出现: 无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Outlook.ContactItem”。此操作失败的原因是对 IID 为“{00063021-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 不支持此接口 (异常来自 HRESULT:0x80004002 (E_NOINTERFACE))。 这个错误!即在运行过程中会出现这个错误,请再帮忙看看,谢谢!
poloyzhang 2014-09-07
  • 打赏
  • 举报
回复
读写 分析文件.
save4me 2014-09-06
  • 打赏
  • 举报
回复
参考: 如何:以编程方式访问 Outlook 联系人 C# Programmatically Manage Contacts In Microsoft Outlook 你访问的是olFolderInBox,联系人是olFolderContacts

OutlookInterop.MAPIFolder contactsFolder = app.ActiveExplorer().Session.GetDefaultFolder(
    OutlookInterop.OlDefaultFolders.olFolderContacts);
wind_cloud2011 2014-09-06
  • 打赏
  • 举报
回复
http://www.cnblogs.com/xiaotuni/archive/2011/11/03/2365678.html
threenewbee 2014-09-06
  • 打赏
  • 举报
回复
(OlDefaultFolders.olFolderInbox); 获得的是Inbox,那么你不会举一反三?

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧