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

Nik*_*las 2 c# outlook reference object instance

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

'你调用的对象是空的'

在警报中(由第一行发生).程序是提前运行的(甚至没有进入catch部分).

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);
}
Run Code Online (Sandbox Code Playgroud)

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

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

Sni*_*tor 6

您需要首先尝试获取对正在运行的实例的引用,并且只有在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;
}
Run Code Online (Sandbox Code Playgroud)

  • 这听起来更像是Outlook配置的问题.可能是加载项? (2认同)
  • 如果我执行此代码两次,我会收到错误并跳入 catch 块。`Operation unavailable <Exception from HRESULT: 0x800401E3 <MK_E_UNAVAILABLE>>` on line `outlookApplication = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application;` 我必须在程序结束时退出/退出/终止应用程序? (2认同)