2009-09-15 12 views
6

Programmaticamente, ovviamente.Salva immagini in Outlook 2007

Avendo già chiesto a this question in superutente, sto cercando di scrivere una semplice macro per visualizzare l'immagine visualizzata in un messaggio HTML (e-mail o feed) in Outlook 2007 e consentirmi di salvarla sul disco.

Sfortunatamente, non sono stato in grado di trovare dove nel modello a oggetti OL posso fare riferimento a immagini collegate o al contenuto html stesso. Trovare i file allegati è facile, sono le immagini collegate/visualizzate che è il mio problema.

Qualsiasi aiuto? Ovviamente, se hai una risposta non programmatica migliore, sarò lieto di vederlo - oltre il superutente, ovviamente ...

risposta

2

Questo è basato sui documenti MSDN. Non ho Outlook per testarlo.

Supponendo di avere un messaggio di posta elettronica aperto, è possibile chiamare il metodo GetInspector sull'istanza MailItem che avete & usare la sua HTMLEditor property per arrivare gestire al DOM.

Da qui in poi, è possibile chiamare metodi regolari come document.Images per ottenere la gestione di tutti gli elementi dell'immagine. Non so, come si può salvarlo localmente su un disco, ma sono sicuro che ci dev'essere un metodo per farlo.

1

ho avuto una seconda occhiata al shahkalpeshs risponde e si avvicinò con la seguente soluzione: (scritto in 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 

Questo codice scaricare tutte le immagini che sono visualizzata nella vostra ActiveWindow e salvali in una cartella.

Sarà necessario aggiungere un riferimento a Microsoft XML (qualsiasi versione> = 2.6 dovrebbe funzionare) attraverso Strumenti-> Riferimenti nel VBA Editor

Se si desidera, è anche possibile impostare un riferimento alla Libreria Microsoft HTML Object e il cambiamento:

Dim htmldoc As Object 
    Dim currentImage As Object 

a:

Dim htmldoc As HTMLDocument 
    Dim currentImage As HTMLImg 

Per quanto riguarda il tuo commento:

@marg, Grazie per la risposta dettagliata. Non riesco ancora a credere che la soluzione debba essere così complessa: l'immagine è già in mostra, perché dovrei scaricarla di nuovo? E se volessi salvare solo una singola immagine? (In Outlook 2003, è stato possibile fare clic con il tasto destro sull'immagine e selezionare Salva come ... ora non più.) Poiché questo è il punto di partenza per una soluzione realmente realizzabile, e poiché non sembra esserci alcuna soluzione migliore nell'attuale Outlook - ti sto dando la taglia ...

Non ho il 2007 per cercare una soluzione non di programmazione.

Non credo che il MailItem Object (CurrentItem nella mia soluzione è un MailItem) differisce molto tra le versioni (ma basare quel presupposto sulla ricerca 0%: D) e non ero in grado di individuare il percorso locale diretta dove sono archiviate le immagini visualizzate anche se sono abbastanza sicuro che dovrebbero essere nella cartella cache del tuo browser. Strisciando la cartella per un file con il nome currentImage.nameProp e copiandolo nella cartella di destinazione sarebbe una soluzione alternativa. Ridigitare semplicemente l'immagine non dovrebbe essere così male: D

+0

+1. Bella risposta! –

+0

Grazie per la risposta dettagliata. Non riesco ancora a credere che la soluzione debba essere così complessa: l'immagine è già in mostra, perché dovrei scaricarla di nuovo? E se volessi salvare solo una singola immagine? (In Outlook 2003, è stato possibile fare clic con il tasto destro sull'immagine e selezionare Salva come ... ora non più.) Poiché questo è il punto di partenza per una soluzione realmente realizzabile, e poiché non sembra esserci alcuna soluzione migliore nell'attuale Outlook - Ti sto dando la taglia ... – AviD

+0

Vedi la mia risposta modificata. – marg

Problemi correlati