tuve un segundo vistazo a shahkalpeshs respuesta y se le ocurrió la siguiente solución: (escrito en 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
Este código se descargará todas las imágenes que se muestra en su ActiveWindow
y guárdalos en una carpeta.
Usted tendrá que añadir una referencia a Microsoft XML (cualquier versión> = 2.6 debería funcionar) a través de Herramientas-> Las referencias en el Editor de VBA
Si lo desea, también puede establecer una referencia a la biblioteca de objetos HTML de Microsoft y el cambio:
Dim htmldoc As Object
Dim currentImage As Object
a:
Dim htmldoc As HTMLDocument
Dim currentImage As HTMLImg
En cuanto a su comentario:
@marg, Gracias por la respuesta detallada. Todavía no puedo creer que la solución tenga que ser tan intrincada: la imagen ya se está visualizando, ¿por qué debería volver a descargarla? ¿Y qué pasa si quiero guardar solo una imagen? (En Outlook 2003, usted pudo hacer clic con el botón derecho en la imagen y seleccionar guardar como ... ahora no más.) Dado que esto es el cierre de una solución viable real, y ya que no parece haber una solución mejor en Outlook actual - Te doy la recompensa ...
No tengo 2007 para buscar una solución sin programación.
No creo que la MailItem
Objeto (CurrentItem
en mi solución es una MailItem
) difiere mucho entre las versiones (pero basar esa suposición en la investigación del 0%: D) y yo no era capaz de localizar la ruta local directa donde se almacenan las imágenes mostradas, aunque estoy bastante seguro de que deberían estar en la carpeta de caché de su navegador. Arrastrar su carpeta para un archivo con el nombre currentImage.nameProp
y copiarlo a su carpeta de destino sería una solución alternativa. Simplemente volver a descargar la imagen no debería ser tan malo: D
+1. ¡Gran respuesta! –
Gracias por la respuesta detallada. Todavía no puedo creer que la solución tenga que ser tan intrincada: la imagen ya se está visualizando, ¿por qué debería volver a descargarla? ¿Y qué pasa si quiero guardar solo una imagen? (En Outlook 2003, usted pudo hacer clic con el botón derecho en la imagen y seleccionar guardar como ... ahora no más.) Dado que esto es el cierre de una solución viable real, y ya que no parece haber una solución mejor en Outlook actual - Te estoy dando la recompensa ... – AviD
Ver mi respuesta editada. – marg