用于从Outlook检索电子邮件的脚本

时间:2015-09-07 09:22:41

标签: email vbscript outlook attachment

这是我从Outlook收件箱中检索电子邮件并存储其附件的脚本。

问题是无法正常工作。它能够从未读电子邮件中收集附件并将它们存储到SavePath中,但是当它读取三封电子邮件时它会以某种方式停止。

奇怪的是,它可以在再次执行时收集剩余的电子邮件,但不是所有剩余的未读电子邮件。

例如:我在收件箱中有6封未读电子邮件,第一次执行时,只读了3封电子邮件并收集了附件。第二次执行时,它会读取接下来的两封电子邮件。第三次执行时,剩余的电子邮件被读取。

我无法弄清楚发生了什么以及为什么不立即阅读所有电子邮件。

Dim SavePath
Dim Subject
Dim FileExtension

SavePath = "C:\IN\"
Subject = "'Transfer File'"
FileExtension = "ARmessage"

Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set objFolder = objNamespace.GetDefaultFolder(6) 'Inbox

Set colItems = objFolder.Items
Set colFilteredItems = colItems.Restrict("[Unread]=true")
Set colFilteredItems = colFilteredItems.Restrict("[Subject] = " & Subject)

For Each objMessage In colFilteredItems
    intCount = objMessage.Attachments.Count
    If intCount > 0 Then
        For i = 1 To intCount
            ' if right(Ucase(objMessage.Attachments.Item(i)),9) = FileExtension then
                objMessage.Attachments.Item(i).SaveAsFile SavePath &  _
                    objMessage.Attachments.Item(i).FileName
            ' End If
        Next
        objMessage.Unread = False
    End If
Next

1 个答案:

答案 0 :(得分:1)

不要对每个"使用"使用您正在更改的集合 - 受限制的集合是动态的,当您标记读取的消息时,集合会更改。使用向下"用于"循环:

dim k
For k = colFilteredItems.Count to 1 step -1
  set objMessage  = colFilteredItems.Item(k)
  ...
next