gpt4 book ai didi

c# - Outlook 返回错误 : The messaging interface has returned an unknown error

转载 作者:太空宇宙 更新时间:2023-11-03 16:49:30 24 4
gpt4 key购买 nike

我在一段代码中遇到了一些问题,我正在尝试将数据从源(此时是访问数据库)导入到自定义表单中,但我不断收到上述错误。

当我在源数据库中使用 VBscript 时,所有联系人都正确导入。当我修复 PST 时,它仍然出现此错误。当我添加 450 毫秒的延迟时。该错误也会发生,但会在稍后的过程中发生。打开或关闭 Outlook 都没有关系。

我正在使用下面的方法

string[] arrFolders = strFolders.Split('\\');

Outlook.Application app = null;
Outlook.MAPIFolder folder = null;

try {
app = new Outlook.Application();
folder = app.GetNamespace("MAPI").Folders[arrFolders[0]];
} catch (Exception ex) {
writeLogLine("Error creating Outlook instance: " + ex.Message);
MessageBox.Show("Error creating Outlook instance\r\n" + ex.Message);
intErrorCount++;
blnHasErrors = true;
blnAbort = true;
}

try {
for (int i = 1; i < arrFolders.Length; i++) {
folder = folder.Folders[arrFolders[i]];
}
} catch (Exception ex) {
writeLogLine("Error navigating to DRM folder: " + ex.Message);
MessageBox.Show("Error navigating to DRM folder\r\n" + ex.Message);
intErrorCount++;
blnHasErrors = true;
blnAbort = true;
}

setProgressbarMaximum(dtResults.Rows.Count);
setProgressbarMode(ProgressBarStyle.Continuous);

//int intRowCount = 0;

foreach (DataRow drItem in dtResults.Rows) {

if (strDRMType == "Contact") {
try {
Outlook.ContactItem x = (Outlook.ContactItem)folder.Items.Add("IPM.Contact." + strFormName);

for (int i = 0; i < arrMappings.GetLength(0); i++) {

if (arrMappings[i, 1] != null && drItem[arrMappings[i, 0]].ToString() != "") {
x.UserProperties[arrMappings[i, 1]].Value = drItem[arrMappings[i, 0]].ToString();
}
}

x.Save();
} catch (Exception ex) {
writeLogLine("Error importing contact: " + ex.Message);
intErrorCount++;
blnHasErrors = true;
}
}

正如我所说,当我循环代码时,它会在 100 到 200 次联系后抛出异常,当我添加延迟时,它会在失败前联系 400/500。

此代码应该用于此特定表单的通用导入工具,因此无需将源列名称硬编码到导入代码中的表单字段。

感谢任何帮助。

最佳答案

我假设这不是 Outlook 加载项,因为您说 OL 是打开还是关闭并不重要,对吧?

您可能想要做的一件事是确保在使用完 COM 对象后释放它们,使用 System.Runtime.InteropServices.Marshal.ReleaseComObject(...)。此外,当您使用像“namespace.Folders[..].Name”这样的点符号时,您实际上是在泄漏对 Folders 集合对象和 Folder 对象的引用。

当您在循环中执行 folders.Items.Add(...) 时,会泄漏很多对象。

因此,首先清理您的 COM 引用,然后看看这对您的情况有何影响。

这是我通常使用 COM 对象的方式:

MyComLib.Foo foo = null;
try
{
foo = new MyComLib.Foo();
foo.DoSomething();
} catch(COMException exc)
{
// handle error, or rethrow
}
finally
{
if(foo != null)
Marshal.ReleaseComObject(foo);
}

关于c# - Outlook 返回错误 : The messaging interface has returned an unknown error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4554865/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com