无法从调用函数访问邮件对象MAPI

本文关键字:对象 MAPI 访问 函数 调用 | 更新日期: 2023-09-27 17:57:33

我要访问Outlook MAPI文件夹并获取邮件地址。这是我的方法

 public static string GetSenderEmailAddress(Microsoft.Office.Interop.Outlook.MailItem mapiObject)
    {
        Microsoft.Office.Interop.Outlook.PropertyAccessor oPA;
        string propName = "http://schemas.microsoft.com/mapi/proptag/0x0065001F";
        oPA = mapiObject.PropertyAccessor;
        string email = oPA.GetProperty(propName).ToString();
        return email;
    }

当按钮点击事件被调用时,我需要激发该方法并检索邮件地址。

按钮点击事件在这里。

      private void button3_Click(object sender, RibbonControlEventArgs e)
        {
 string mailadd =  ThisAddIn.GetSenderEmailAddress(Microsoft.Office.Interop.Outlook.MailItem);
        System.Windows.Forms.MessageBox.Show(mailadd);
}

此处出现错误

Microsoft.Office.Interop.Outlook.MailItem是一个在给定上下文中无效的"类型"

这是我的第一个addin,有人知道如何达到这个结果吗?

无法从调用函数访问邮件对象MAPI

您可以使用RibbonControlEventArgs访问Context,后者将为您提供MailItem实例。

private Outlook.MailItem GetMailItem(RibbonControlEventArgs e)
{
    // Inspector Window
    if (e.Control.Context is Outlook.Inspector)
    {
        Outlook.Inspector inspector = e.Control.Context as Outlook.Inspector;
        if (inspector == null) return null;
        if (inspector.CurrentItem is Outlook.MailItem)
            return inspector.CurrentItem as Outlook.MailItem;
    }
    // Explorer Window 
    if (e.Control.Context is Outlook.Explorer)
    {
        Outlook.Explorer explorer = e.Control.Context as Outlook.Explorer;
        if (explorer == null) return null; 
        Outlook.Selection selectedItems = explorer.Selection;
        if (selectedItems.Count != 1)  return null;  
        if (selectedItems[1] is Outlook.MailItem)
            return selectedItems[1] as Outlook.MailItem;
    }     
    return null;
}

你可以添加这个方法,然后像这样使用它…

string mailAddress = string.Empty;
Outlook.MailItem mailItem = GetMailItem(e);
if (mailItem != null)
    mailAddress =  ThisAddIn.GetSenderEmailAddress(mailItem);