J'ai eu un second regard sur shahkalpeshs répondent et est venu avec la solution suivante: (écrit dans 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
Ce code téléchargera toutes les images qui sont affichés dans votre ActiveWindow
et les enregistrer dans un dossier.
Vous devrez ajouter une référence à Microsoft XML (toute version> = 2.6 devrait fonctionner) par Outils-> Références dans l'éditeur VBA
Si vous le souhaitez, vous pouvez également définir une référence à la bibliothèque d'objets Microsoft HTML et changement:
Dim htmldoc As Object
Dim currentImage As Object
à:
Dim htmldoc As HTMLDocument
Dim currentImage As HTMLImg
En ce qui concerne votre commentaire:
@marg, Merci pour la réponse détaillée. Je ne peux toujours pas croire que la solution doit être si compliquée - l'image est déjà affichée, pourquoi devrais-je devoir la télécharger à nouveau? Et si je veux enregistrer une seule image? (Dans Outlook 2003, vous pouviez faire un clic droit sur l'image et sélectionner enregistrer sous ... maintenant pas plus.) Puisque ceci est la solution pratique et qu'il n'y a pas de meilleure solution dans Outlook actuel - Je te donne la prime ...
Je n'ai pas 2007 pour chercher une solution de non-programmation.
Je ne crois pas que le MailItem
objet (CurrentItem
dans ma solution est un MailItem
) diffère beaucoup entre les versions (mais je fonde cette hypothèse sur 0% recherche: D) et je n'ai pas pu trouver le chemin direct local où les images affichées sont stockées même si je suis assez sûr qu'elles devraient être dans votre dossier de cache de navigateurs. L'exploration de votre dossier pour un fichier portant le nom currentImage.nameProp
et la copie dans votre dossier de destination constituerait une solution alternative. Le simple fait de télécharger à nouveau l'image ne devrait pas être si mauvais: D
+1. Très bonne réponse! –
Merci pour la réponse détaillée. Je ne peux toujours pas croire que la solution doit être si compliquée - l'image est déjà affichée, pourquoi devrais-je devoir la télécharger à nouveau? Et si je veux enregistrer une seule image? (Dans Outlook 2003, vous pouviez faire un clic droit sur l'image et sélectionner Enregistrer sous ... maintenant pas plus.) Puisque ceci est la solution pratique, et puisqu'il n'y a pas de meilleure solution dans Outlook actuel - Je te donne la prime ... – AviD
Voir ma réponse éditée. – marg