什么时候MailItem不是MailItem?

时间:2020-03-05 18:57:39  来源:igfitidea点击:

我已经在Outlook的Visual Basic中编写了消息处理程序功能(我们正在使用Outlook 2003和Exchange Server)来帮助我整理传入的电子邮件。

它对我有用,除了有时规则失败并且Outlook将其停用。

然后,我重新打开规则,并在"收件箱"中手动运行该规则以进行跟踪。该规则自发地失败,并且每天停用几次。

我很想一劳永逸地解决这个问题。

解决方案

回答

已在Outlook的Visual Basic中编写了消息处理程序功能(我们正在使用Outlook 2003和Exchange Server)来帮助我整理传入的电子邮件。它对我有用,除了有时规则失败并且Outlook将其禁用。然后,我重新打开规则,并在"收件箱"中手动运行该规则以赶上进度。该规则自发地失败,并且一天停用几次。我很想一劳永逸地解决这个问题。

以下是剥离该功能的代码,但让我们大致了解了它的外观:

Public WithEvents myOlItems As Outlook.Items

   Public Sub Application_Startup()
       ' Reference the items in the Inbox. Because myOlItems is declared
       ' "WithEvents" the ItemAdd event will fire below.
       ' Set myOlItems = Outlook.Session.GetDefaultFolder(olFolderInbox).Items
       Set myOlItems = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Items
   End Sub

   Private Sub myOlItems_ItemAdd(ByVal Item As Object)
       On Error Resume Next
       If TypeName(Item) = "MailItem" Then
           MyMessageHandler Item
       End If
   End Sub

   Public Sub MyMessageHandler(ByRef Item As MailItem)
       Dim strSender As String
       Dim strSubject As String

       If TypeName(Item) <> "MailItem" Then
           Exit Sub
       End If

       strSender = LCase(Item.SenderEmailAddress)
       strSubject = Item.Subject

       rem do stuff
       rem do stuff
       rem do stuff
   End Sub

我收到的一个错误是"类型不匹配"调用MyMessageHandler,其中VB抱怨该项目不是MailItem。好的,但是TypeName(Item)返回" MailItem",那么为什么Item不是MailItem?

我收到的另一封邮件是一封主题为空的电子邮件。线

strSubject = Item.Subject

给我一个错误。我知道Item.Subject应该为空,但是为什么会出现错误?

谢谢。

回答

我的记忆对此有些困惑,但是我认为MailItem并非已读邮件的MailItem。 (不幸的是,演示此操作的VBA代码是在另一项工作中编写的,现在还没有。)

我还编写了用于处理传入消息的代码,可能是出于与我们相同的原因(Exchange的规则太多,或者规则向导的规则太复杂),并且似乎想起遇到了同样的问题,有些项目似乎即使我用你写的东西抓住他们,也来自不同的类型。

我将看看是否可以提供一个具体的示例,如果有帮助的话。