当然是以编程方式。
已经在超级用户上问过this question,我正在编写一个简单的宏来下载Outlook 2007中HTML消息(电子邮件或订阅源)中显示的图像,并允许我将其保存到磁盘。
不幸的是,我还没能找到OL对象模型中我可以引用链接图像或html内容本身的位置。查找附件很容易,链接/显示的图像就是我的问题。
有任何帮助吗?当然,如果你有一个更好的非程序化答案,我会很高兴看到 - 当然超级用户...
答案 0 :(得分:2)
这是基于MSDN文档。我没有Outlook来测试它。
假设您打开了一封电子邮件,则可以在GetInspector
实例上调用MailItem
方法。使用其HTMLEditor
property来处理DOM。
从此处开始,您可以调用常规方法(例如document.Images
)来处理所有图像元素。我不知道,如何将它本地保存到磁盘,但我相信,必须有一些方法可以做到这一点。
答案 1 :(得分:1)
我再看一下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
中显示的所有图像,并将其保存在文件夹中。
您需要通过工具 - &gt; VBA编辑器中的参考
Microsoft XML 的引用(任何版本&gt; = 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
是MailItem
)在版本之间存在很大差异(但我的假设基于0%的研究:D)而且我无法找到存储显示图像的直接本地路径,即使我非常确定它们应该在您的浏览器缓存文件夹中。将文件夹抓取名称为currentImage.nameProp
的文件并将其复制到目标文件夹将是另一种解决方案。简单地重新下载图像不应该那么糟糕:D