您好我正在创建一个新的Outlook.Application(使用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实例(小警报对话框)。
答案 0 :(得分:6)
您需要先尝试获取对正在运行的实例的引用,如果无法附加现有实例,则只需创建一个新实例(new Outlook.Application()
。
This MSDN article非常清楚。
直接来自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;
}
答案 1 :(得分:0)
就我而言,消息
'对象引用未设置为对象的实例'
被Snag-it插件抛出。所以这与核心Outlook没有任何关系。
我禁用了插件,我不再收到此消息。