Я изменил некоторые коды для получения выбранных вложений сообщений на моем жестком диске, как показано ниже:

Public Sub SaveAttachments()
Dim objOL As Outlook.Application
Dim objMsg As Outlook.MailItem 'Object
Dim objAttachments As Outlook.Attachments
Dim objSelection As Outlook.Selection
Dim I As Long
Dim lngCount As Long
Dim strFile As String
Dim strFolderpath As String
Dim strDeletedFiles As String
Dim Counter As Long

strFolderpath = "D:\attachments"
If (Dir$(strFolderpath, vbDirectory) = "") Then
    MsgBox "'" & strFolderpath & "'  not exist"
    MkDir strFolderpath
    MsgBox "'" & strFolderpath & "'  we create it"

Else
    MsgBox "'" & strFolderpath & "'  exist"
End If

    ' Get the path to your My Documents folder
    'strFolderpath = CreateObject("WScript.Shell").SpecialFolders(16)
    strFolderpath = strFolderpath & "\"
    On Error Resume Next

    ' Instantiate an Outlook Application object.
    Set objOL = CreateObject("Outlook.Application")

    ' Get the collection of selected objects.
    Set objSelection = objOL.ActiveExplorer.Selection

' The attachment folder needs to exist
' You can change this to another folder name of your choice

    ' Set the Attachment folder.
    strFolderpath = strFolderpath

    ' Check each selected item for attachments.
    Counter = 1
    For Each objMsg In objSelection

    Set objAttachments = objMsg.Attachments
    lngCount = objAttachments.Count

    If lngCount > 0 Then

    ' Use a count down loop for removing items
    ' from a collection. Otherwise, the loop counter gets
    ' confused and only every other item is removed.

    For I = lngCount To 1 Step -1

    ' Get the file name.
    strFile = objAttachments.Item(I).FileName

    ' Combine with the path to the Temp folder.
    strFile = strFolderpath & Counter & "_" & strFile

    ' Save the attachment as a file.
    objAttachments.Item(I).SaveAsFile strFile
    Counter = Counter + 1
    Next I
    End If

    Next

ExitSub:

Set objAttachments = Nothing
Set objMsg = Nothing
Set objSelection = Nothing
Set objOL = Nothing
    MsgBox "All Selected Attachments Have Been Downloaded ..."
End Sub

моя цель электронная почта использует сервис imap ...

этот код vb работает отлично!

но моя проблема в том, что когда загрузка закончится, у нас нет нужных файлов в папке вложений!
У меня в почтовом ящике 450 сообщений UNREAD , и все они имеют прикрепленные файлы ...
но у нас есть только 200 файлов в папке вложений! (создается верхними кодами)
как я могу исправить эту проблему?
кажется, что эта проблема связана с непрочитанными сообщениями и моей скоростью ADSL (но это не должно быть, я не знаю ?!)
Когда вы читаете письмо, кажется, что Outlook делает что-то с этим письмом, и в следующий раз, когда электронное письмо работает быстрее из-за его кэширования.
как я могу сделать эту работу для моих непрочитанных писем с верхними кодами?
или есть какие-то идеи по поводу этой проблемы?

наконец я был бы очень признателен за просмотр и добавить или исправить мои коды

1 ответ1

0

Если какое-либо из вложений имеет одинаковое имя, оно может быть перезаписано (не помню, если .SaveAsFile будет просто перезаписывать или вызывать ошибку), поэтому вы можете проверить, существует ли имя файла первым или добавить какой-либо другой идентификатор к имени файла (может быть, тему сообщения?).

В Outlook можно настроить разные действия с учетными записями электронной почты с использованием IMAP, например загрузку только заголовков и получение всего сообщения только при его открытии или загрузку всего сообщения в первую очередь.

Можете ли вы сделать несколько случайных проверок, чтобы увидеть, существуют ли вложения из прочитанных сообщений, и нет ли вложения из непрочитанных сообщений? Это подтвердило бы теорию IMAP и могло бы быть исправлено в коде с помощью метода загрузки выбранных сообщений, если их еще нет.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .