Сохранить изображения в Outlook 2007 - PullRequest
6 голосов
/ 15 сентября 2009

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 24 июня 2010

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

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

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

1 голос
/ 24 июня 2010

Я еще раз взглянул на ответ шахкальпеша и нашел следующее решение: (Написано в 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

...