Сохраните образы в Outlook 2007

Программно, конечно.

Уже задав этот вопрос на суперпользователе, я смотрю на запись простого макроса к выпадающему отображенное изображение в сообщении HTML (электронная почта или канал) в перспективе 2007, и позволяю мне сохранять его на диск.

К сожалению, я не смог найти, где в объектной модели OL я могу сослаться или на связанные изображения или на само содержимое HTML. Прилагается файлов легок, это, связался/отобразил изображения, который является моей проблемой.

Какая-либо справка? Конечно, если у Вас будет лучший непрограммный ответ, то я буду рад видеть что - на суперпользователе, конечно...

6
задан Community 20 March 2017 в 10:18
поделиться

2 ответа

Это основано на документации MSDN. У меня нет Outlook, чтобы проверить это.

Предполагая, что у вас открыто сообщение электронной почты, вы можете вызвать метод GetInspector в экземпляре MailItem , который у вас есть, и использовать его свойство HTMLEditor , чтобы получить дескриптор DOM.

С этого момента вы можете вызывать обычные методы, такие как document.Images , чтобы обрабатывать все элементы изображения. Я не знаю, как это можно сохранить локально на диск, но я уверен, что для этого должен быть какой-то способ.

2
ответ дан 17 December 2019 в 18:18
поделиться

Я еще раз просмотрел ответ shahkalpeshs и пришел к следующему решению: (Написано в 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) через Tools->References в редакторе 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

1
ответ дан 17 December 2019 в 18:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: