当前位置: 动力学知识库 > 问答 > 编程问答 >

email - Using VBScript, how do I update Microsoft Outlook Inbox folder before accessing it in VBS?

问题描述:

The following is a VBScript (VBS) that I use the check for and process certain Outlook emails and attachments. The script finds the emails via their email address and subject. It then saves the attachment in a folder and moves the email to a folder within Outlook. (Most of this code was adapted from a stackoverflow.com post, but I have since forgotten which one.)

My issue: Sometimes this script has to be run before the user has opened Outlook for the day; therefore, none of the Outlook folders have been updated and the script can't find emails that have been sent to the user since the user shut Outlook down last.

My question: How do I update the Outlook inbox then proceed with the rest of the script insuring that the Inbox is (or all Outlook folders are) completely updated? I'm not sure if VBS will wait for the folder update to happen, but if it won't, I of course need it to. I don't know how to update the inbox or wait for it to update, if waiting is applicable.

Other tips on how to make the script better are welcome.

My VBScript:

Const olFolderInbox = 6

Set objFSO = CreateObject("Scripting.FileSystemObject")

Set objOutlook = CreateObject("Outlook.Application")

Set objNamespace = objOutlook.GetNamespace("MAPI")

Set objFolder = objNamespace.GetDefaultFolder(olFolderInbox)

Call SaveAndMoveAttachment("'subject 1'", objFolder)

Call SaveAndMoveAttachment("'subject 2'", objFolder)

Call SaveAndMoveAttachment("'subject 3'", objFolder)

Set objFSO = Nothing

Set objOutlook = Nothing

Set objNamespace = Nothing

WScript.Quit

Sub SaveAndMoveAttachment(sSubject, objFolder)

Set colItems = objFolder.Items

Set colFilteredItems = colItems.Restrict("[Subject] = " & sSubject)

If colFilteredItems.count = 0 then

Msgbox "An email with subject " & sSubject & " in it was not found in your Outlook Inbox"

WScript.Quit

end if

For Each objMessage In colFilteredItems

Set colAttachments = objMessage.Attachments

intCount = colAttachments.Count

If intCount <> 0 and objMessage.Sender.Address = "[email protected]" Then

For i = 1 To intCount

strFileName = "Z:\somepath\" & objMessage.Attachments.Item(i).FileName

objMessage.Attachments.Item(i).SaveAsFile strFileName

'move the message to somefolder folder

Set objFoldersomefolder = objNamespace.GetDefaultFolder(olFolderInbox).Folders("somefolder")

objMessage.Move objFoldersomefolder

Next

End If

Next

Set colFilteredItems = Nothing

Set colAttachments = Nothing

Set colItems = Nothing

End Sub

网友答案:

Add logon step between above 2 lines

WSCript.Sleep 2000 objNamespace.Logon objNamespace.SendAndReceive(True)

网友答案:

Below this line:

Set objNamespace = objOutlook.GetNamespace("MAPI")

Add this:

WSCript.Sleep 2000
objNamespace.SendAndReceive(True) 

I found it here: http://www.experts-exchange.com/Software/Office_Productivity/Groupware/Outlook/Q_28215854.html

分享给朋友:
您可能感兴趣的文章:
随机阅读: