从 Outlook 检索电子邮件的脚本
Posted
技术标签:
【中文标题】从 Outlook 检索电子邮件的脚本【英文标题】:Script for retrieving emails from Outlook 【发布时间】:2015-09-07 09:22:40 【问题描述】:这是我从 Outlook 收件箱中检索电子邮件并存储其附件的脚本。
问题是无法正常工作。它能够从未读的电子邮件中收集附件并将它们存储到SavePath
,但是当它阅读了三封电子邮件时它就停止了。
奇怪的是,它再次执行时能够收集剩余的邮件,但不能收集所有剩余的未读邮件。
例如: 我在收件箱中有 6 封未读电子邮件,第一次执行时只读取了 3 封电子邮件并收集了它们的附件。第二次执行时,它会读取接下来的 2 封电子邮件。第三次执行时,读取了剩余的邮件。
我不知道发生了什么以及为什么不一次阅读所有电子邮件。
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】:不要将“for each”用于您正在更改的集合 - 受限集合是动态的,当您将消息标记为已读时,集合会更改。使用向下的“for”循环:
dim k
For k = colFilteredItems.Count to 1 step -1
set objMessage = colFilteredItems.Item(k)
...
next
【讨论】:
感谢您的回复德米特里。应用您的建议后,它现在会启动“语法错误”消息。 现在我得到这个错误:Invalid loop control variable
哦,等一下,您还有另一个使用“I”的循环。对循环变量使用舒缓的 else(见上文)
天啊!我没有意识到。最后它就像一个魅力一样工作。谢谢德米特里!以上是关于从 Outlook 检索电子邮件的脚本的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 R RDCOMClient 检索 Outlook 收件箱电子邮件?
从 python 脚本发送时,Outlook 中的电子邮件附件名称始终为“AT00001.xlsx”而不是实际名称