4

这是我正在处理的一个更大项目的一部分,但现在我只是想找到一种方法来检索发件人的电子邮件地址,每次用户点击收件箱中的邮件项目及其内容(电子邮件的实际正文)显示在相邻的面板中。

我尝试在过程中编写代码ItemLoad event handler,但即使是 MSDN 网站也说作为参数传递的 Item 对象没有初始化其属性,因此调用 (Item as MailItem).SenderEmailAddress 将不起作用。

有人能告诉我怎么做吗?(我使用的是 Outlook 2007)

顺便说一句,以下方法不起作用:

public void OnConnection(object application, 
                         Extensibility.ext_ConnectMode connectMode, 
                         object addInInst, 
                         ref System.Array custom)
{
    //this code runs
    applicationObject = (Outlook.Application)application;
    this.applicationObject.Startup += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_StartupEventHandler(applicationObject_Startup);
}

void applicationObject_Startup()
{
        //this code runs
        this.applicationObject.Explorers.NewExplorer += new Microsoft.Office.Interop.Outlook.ExplorersEvents_NewExplorerEventHandler(Explorers_NewExplorer);
}

void Explorers_NewExplorer(Microsoft.Office.Interop.Outlook.Explorer Explorer)
{
    //This code does not run
    Explorer.SelectionChange += new Microsoft.Office.Interop.Outlook.ExplorerEvents_10_SelectionChangeEventHandler(Explorer_SelectionChange);
}

void Explorer_SelectionChange()
{
    //This code does not run
    //do something
}
4

2 回答 2

0

我已经有一段时间没有这样做了,但我猜你需要在代表主窗口的对象上使用该SelectionChange事件。Explorer

Application.Startup事件处理程序中,您需要获取Explorers属性,并为NewExplorer事件添加一个处理程序,只要用户打开一个新窗口就会触发。

从那里,您可以挂钩新对象的SelectionChange事件,并且在该事件的处理程序中,您将能够通过属性获取所选项目。然后,您应该能够获取每个选定项目的发件人电子邮件地址。ExplorerSelection

于 2012-11-20T18:40:14.223 回答
0

我找到了这样做的方法:

    public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom)
    {
        applicationObject = (Outlook.Application)application;
        this.applicationObject.ActiveExplorer().SelectionChange += new Microsoft.Office.Interop.Outlook.ExplorerEvents_10_SelectionChangeEventHandler(Explorer_SelectionChange);
    }
    void Explorer_SelectionChange()
    {
        if (applicationObject.ActiveExplorer().Selection.Count == 1)
        {
            Outlook.MailItem item = applicationObject.ActiveExplorer().Selection[1] as Outlook.MailItem;

            if (item != null)
            {
               string address = item.SenderEmailAddress;
               //do something
            }
        }
    }
于 2012-11-22T19:04:58.677 回答