Email 用于保存Outlook附件的vbscript仅保存2封电子邮件

Email 用于保存Outlook附件的vbscript仅保存2封电子邮件,email,vbscript,outlook,Email,Vbscript,Outlook,我有这个脚本可以自动将outlook中的附件保存到文件夹中,但它一次只保存两封电子邮件中的附件。如何将其增加到3或4 Const olFolderInbox = 6 Set objOutlook = CreateObject("Outlook.Application") Set objNamespace = objOutlook.GetNamespace("MAPI") Set objMailbox = objNamespace.Folders("Mailbox - ABC") Set obj

我有这个脚本可以自动将outlook中的附件保存到文件夹中,但它一次只保存两封电子邮件中的附件。如何将其增加到3或4

Const olFolderInbox = 6

Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set objMailbox = objNamespace.Folders("Mailbox - ABC")
Set objFolder = objMailbox.Folders("Inbox")

Set colItems = objFolder.Items
Set colFilteredItems = colItems.Restrict("[UnRead] = True")

For Each objMessage in colFilteredItems
    intCount = objMessage.Attachments.Count
    If intCount > 0 Then
        For i = 1 To intCount
            objMessage.Attachments.Item(i).SaveAsFile "C:\" &  _
                objMessage.Attachments.Item(i).FileName
        Next 
    End If
    objMessage.Unread = False
Next

试试这个,适用于主收件箱中的电子邮件:

Set outlook = createobject("outlook.application")
Set session = outlook.getnamespace("mapi")
session.logon

Set inbox = session.getdefaultfolder(6) // inbox is 6

For Each m In inbox.items
  If m.unread  Then 
    intCount = m.Attachments.Count
    If intCount > 0 Then
        For i = 1 To intCount
            m.Attachments.Item(i).SaveAsFile "C:\pic\" &  _
                m.Attachments.Item(i).FileName
        Next 
    End If
    m.Unread = False
  End If
Next

session.logoff

Set outlook = Nothing
Set CaseTitle = Nothing
Set session = Nothing

WScript.Quit
如果要获取收件箱中文件夹的附件,只需放置以下行:

Set inbox = session.getdefaultfolder(6).Folders("FolderName")

项(i).文件名可能为空或无效。您可以尝试
Item(i).DisplayName
或创建一个类似
“att”&i&“.dat”
的人工名称。使用
Debug.print
记录名称。不建议将文件直接写入“C:\”。你可能会破坏你的系统。选择另一个您有足够访问权限的目录。检查
附件。键入
属性并跳过嵌入的附件(olEmbeddedItem=5)。它们不能另存为文件。@Axel谢谢,我将尝试displayname并跳过embeddeditem,看看它是否正确works@Axel-不行。问题似乎在于,它不会检查超过2封电子邮件。查看电子邮件后,它将下载所有附件。因此,如果我有3封带附件的未读电子邮件,它只会读取2封电子邮件,并留下第三封。如果你在一个文件夹中循环,可能会有没有邮件项目的项目对象。如果objMessage.Class=olMail,则使用
,然后…
以避免错误。此代码看起来很可靠,可能是saveasfile命令处理时间过长,或者您的错误处理没有任何指示。可能在“SaveAsFile”命令后添加“if err.number 0 then msgbox err.description”?不要循环浏览文件夹中的所有项目-可能有成千上万个项目。开始时,用户必须将包含附件的所有相关电子邮件“标记为未读”。这样,就不会考虑不必要的电子邮件。我已经为成千上万的人尝试过这个代码。如果用户将相关电子邮件标记为未读邮件,则不会崩溃。关闭缓存模式,并针对包含数千封电子邮件的文件夹运行脚本。一旦获得,不要这样做。这就是Items.Restrict和Items.Find/FindNext的用途。