当然,以编程方式。
已经在超级用户上问过这个问题后,我正在考虑编写一个简单的宏来拉下 Outlook 2007 中 HTML 消息(电子邮件或提要)中显示的图像,并允许我将其保存到磁盘。
不幸的是,我无法在 OL 对象模型中找到可以引用链接图像或 html 内容本身的位置。查找附件很容易,链接/显示的图像是我的问题。
有什么帮助吗?当然,如果您有更好的非编程答案,我会很高兴看到这一点 - 当然是超级用户......
当然,以编程方式。
已经在超级用户上问过这个问题后,我正在考虑编写一个简单的宏来拉下 Outlook 2007 中 HTML 消息(电子邮件或提要)中显示的图像,并允许我将其保存到磁盘。
不幸的是,我无法在 OL 对象模型中找到可以引用链接图像或 html 内容本身的位置。查找附件很容易,链接/显示的图像是我的问题。
有什么帮助吗?当然,如果您有更好的非编程答案,我会很高兴看到这一点 - 当然是超级用户......
这是基于 MSDN 文档。我没有 Outlook 来测试它。
假设您打开了一封电子邮件,您可以在您拥有的实例GetInspector
上调用方法并使用其属性来获取 DOM 的句柄。MailItem
HTMLEditor
从这里开始,您可以调用常规方法,例如document.Images
获取所有图像元素的句柄。我不知道,如何将它本地保存到磁盘,但我敢肯定,必须有一些方法可以做到这一点。
我再次查看了 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
的所有图像并将它们保存在一个文件夹中。
您需要通过 VBA 编辑器中的 Tools->References 添加对Microsoft XML的引用(任何版本 >= 2.6 都可以使用)
如果您愿意,您还可以设置对Microsoft HTML 对象库的引用并更改:
Dim htmldoc As Object
Dim currentImage As Object
至:
Dim htmldoc As HTMLDocument
Dim currentImage As HTMLImg
关于您的评论:
@marg,感谢您的详细回复。我仍然无法相信解决方案必须如此复杂 - 图像已经显示,为什么我必须再次下载它?如果我只想保存一张图片怎么办?(在 Outlook 2003 中,您可以右键单击图像并选择另存为... 现在不再需要了。)因为这是接近实际可行的解决方案,而且在当前 Outlook 中似乎没有更好的解决方案- 我给你赏金...
我没有 2007 年寻找非编程解决方案。
我不相信MailItem
对象(CurrentItem
在我的解决方案中是 a MailItem
)在版本之间有很大差异(但我基于 0 % 研究的假设:D)并且我无法找到存储显示图像的直接本地路径虽然我很确定它们应该在您的浏览器缓存文件夹中。在您的文件夹中搜索具有该名称的文件并将其currentImage.nameProp
复制到您的目标文件夹将是一种替代解决方案。简单地重新下载图像应该不会那么糟糕:D