正在创建未设置为对象实例的Outlook应用程序对象引用

本文关键字:实例 Outlook 应用程序 对象引用 对象 创建 设置 | 更新日期: 2023-09-27 17:58:56

你好,我正在创建一个新的Outlook。应用程序(带有v.14.0.0.0 Office库),并使用C#检索收件箱电子邮件。只有当outlook没有运行时,我才会得到错误

"对象引用未设置为对象的实例"

在警报中(由第一行出现)。程序正在运行(甚至没有进入捕获部分)。

try {
    Outlook.Application outlookApplication = new Outlook.Application();
    Outlook.NameSpace mapiNameSpace = outlookApplication.GetNamespace("MAPI");
    Outlook.MAPIFolder folder = mapiNameSpace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
    foreach (Object obj in folder.Items) {
        if (obj is Outlook.MailItem) {
            Outlook.MailItem mailItem = (Outlook.MailItem)obj;
        }
    }
} catch (Exception e) {
    Console.WriteLine("Unfortunately an error occurred");
    Console.WriteLine(e.Message);
}

这个烦人的警报有什么解决方案吗?我可以抑制它还是解决问题?

警报来自Outlook实例,我可以看到它,因为在导航栏中,Outlook实例是打开的(小警报对话框)。

正在创建未设置为对象实例的Outlook应用程序对象引用

您需要首先尝试获取对正在运行的实例的引用,并且只有在现有实例无法连接到的情况下才能创建一个新实例(new Outlook.Application())。

MSDN的这篇文章非常清楚。

直接从MSDN文章中无耻地剽窃:

Outlook.Application application = null;
// Check whether there is an Outlook process running.
if (Process.GetProcessesByName("OUTLOOK").Count() > 0)
{
    // If so, use the GetActiveObject method to obtain the process and cast it to an Application object.
    application = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application;
}
else
{
    // If not, create a new instance of Outlook and log on to the default profile.
    application = new Outlook.Application();
    Outlook.NameSpace nameSpace = application.GetNamespace("MAPI");
    nameSpace.Logon("", "", Missing.Value, Missing.Value);
    nameSpace = null;
}

在我的情况下,消息

"对象引用未设置为对象的实例"

是由Snag it插件抛出的。因此,这与核心Outlook无关。

我禁用了插件,不再收到此消息。