Я еще раз взглянул на ответ шахкальпеша и нашел следующее решение:
(Написано в Outlook 2003)
Option Explicit
Private Sub getImages()
Dim xmlhttp_ As xmlhttp
Dim htmldoc As Object
Dim currentImage As Object
Dim currentResponse() As Byte
Dim startTime As Date
Dim maxTime As Long
Dim pathFolder As String
Dim pathFull As String
Dim nrFile As Integer
pathFolder = "C:\YourFolder\Images\" '"(small fix for stackoverflow syntaxhighlighter)
maxTime = 30 ' max time to load 1 File in seconds '
If Me.ActiveWindow.CurrentItem.GetInspector.EditorType = olEditorHTML Then
Set htmldoc = Me.ActiveWindow.CurrentItem.GetInspector.HTMLEditor
Set xmlhttp_ = New xmlhttp
For Each currentImage In htmldoc.images
xmlhttp_.Open "GET", currentImage.src
If Left(currentImage.src, 8) <> "BLOCKED:" Then
xmlhttp_.Send
startTime = Now
pathFull = pathFolder & currentImage.nameProp
pathFull = Replace(pathFull, "?", vbNullString)
pathFull = Replace(pathFull, "&", vbNullString)
Do While xmlhttp_.readyState <> 4
If DateTime.DateDiff("s", startTime, Now) > maxTime Then Exit Do
DoEvents
Loop
If xmlhttp_.readyState = 4 Then
If Dir(pathFull) <> "" Then Kill pathFull
nrFile = freeFile
Open pathFull For Binary As #nrFile
currentResponse = xmlhttp_.responseBody
Put #nrFile, , currentResponse
Close #nrFile
End If
End If
Next currentImage
End If
Set xmlhttp_ = Nothing
Set currentImage = Nothing
Set htmldoc = Nothing
End Sub
Этот код загрузит все изображения, которые отображаются в вашем ActiveWindow
, и сохранит их в папке.
Вам нужно будет добавить ссылку на Microsoft XML (любая версия> = 2.6 должна работать) через Сервис-> Ссылки в редакторе VBA
Если вы хотите, вы также можете установить ссылку на Microsoft HTML Object Library и изменить:
Dim htmldoc As Object
Dim currentImage As Object
до:
Dim htmldoc As HTMLDocument
Dim currentImage As HTMLImg
По поводу вашего комментария:
@ marg, спасибо за подробный ответ. Я до сих пор не могу поверить, что решение должно быть настолько запутанным - изображение уже отображается, зачем мне его снова загружать? А что если я хочу сохранить только одно изображение? (В Outlook 2003 вы могли щелкнуть правой кнопкой мыши на изображении и выбрать «Сохранить как ... теперь не более».) Поскольку это закрывает фактическое работоспособное решение, и поскольку в текущем Outlook не существует лучшего решения - Я даю тебе награду ...
У меня нет 2007 года, чтобы искать непрограммное решение.
Я не верю, что объект MailItem
(CurrentItem
в моем решении - MailItem
) сильно отличается между версиями (но я основываю это предположение на 0% исследованиях: D), и я не смог найдите прямой локальный путь, где хранятся отображаемые изображения, хотя я уверен, что они должны быть в кеш-папке вашего браузера. Обход вашей папки для файла с именем currentImage.nameProp
и копирование его в папку назначения будет альтернативным решением. Просто перезагружать изображение не должно быть так плохо: D