【问题标题】:Outlook MailItem cache issue when saving in vb.net保存在 vb.net 时的 Outlook MailItem 缓存问题
【发布时间】:2015-04-01 21:39:19
【问题描述】:

我有一个小型 WinForms 程序,它允许我的用户为我们的客户创建电子邮件群发。该应用程序有两种选择:一种是用于设计电子邮件的 HTML 编辑器(效果很好),第二种是导入 .msg 或 .oft 模板。 电子邮件完成后,它会被移至共享的 Outlook 邮件文件夹,以进行夜间宏发送作业。

很简单的东西!

问题:一旦模板在应用程序前景中打开,似乎缓存该版本。如果用户决定退出,则在模板中进行更改,Outlook 不会接受更新。

注意:如果用户单击“预览”按钮,他们会在收件箱中收到正确的更新版本。但是当他们提交 MailItem 时,它会选择旧版本。

 Dim newItem  as Outlook.MailItem = gobjOutlook.CreateItemFromTemplate(fileEmailTemplate.FileName)

发送命令运行良好newItem.Send()

但是当我将它移动到共享文件夹时,它会从某个地方获取原始版本。

Dim addFldr As Outlook.MAPIFolder
addFldr = StoreFLDR.Folders.Add(gobjNamespace.CurrentUser.Name & ": " & DateTime.Now.ToString())
newItem.Save()                 
newItem.Move(addFldr )

我尝试将 GC 和 SaveAs 强制到另一个位置并重新加载模板,但没有成功。

【问题讨论】:

  • 我刚刚发现如果我使用文本编辑器编辑 .msg/.otf 文件包含原始消息。并且 .net 代码会选择旧的(原始)消息而不是新编辑的消息。

标签: vb.net outlook interop exchange-server mailitem


【解决方案1】:

我建议从立即释放底层 COM 对象开始。使用完后,使用System.Runtime.InteropServices.Marshal.ReleaseComObject 释放 Outlook 对象。然后在 Visual Basic 中将变量设置为 Nothing(在 C# 中为 null)以释放对对象的引用。

您可能会发现How To: Create a new Outlook message based on a template 文章很有帮助。无论如何,很高兴看到您与 Outlook 相关的完整源代码。

【讨论】:

  • 您好,感谢您的链接!好文章!我会在处理完所有对象后立即释放它们。我昨天测试了一些东西,发现......当我的应用程序(完全)关闭时,我创建了一个新的 .otf 文件并向其中添加一些文本,例如“Hello,World!”保存并退出。然后我重新打开该文件并将文本更改为“你好,你好!”。当我打开我的应用程序并使用 .otf 文件时,MailItem.Send 命令会发送更新的版本,但是当我移动文件时,它会移动原始的“Hello,World!”文字...我不知道它是从哪里来的!有什么帮助吗?
  • 我使用 Outlook 2010 编辑邮件。并使用 CreateItemFromTemplate 加载它
  • 如果您想获得任何建议或解决方案,您需要发布所有代码。
猜你喜欢
  • 2010-12-24
  • 1970-01-01
  • 2013-12-23
  • 2016-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多