Outlook 2010电子邮件发送到网页,包括图像

时间:2015-04-17 13:43:07

标签: javascript jquery vba outlook

我可以使用以下代码将Outlook电子邮件粘贴到网页中。

VBA

Sub HTMLClipboard()
  Dim M As MailItem, Buf As MSForms.DataObject
  Set M = ActiveExplorer().Selection.Item(1)
  Set Buf = New MSForms.DataObject
  Buf.SetText M.HTMLBody
  Buf.PutInClipboard
End Sub

HTML

<div id="Data"></div>
<textarea id="TA"></textarea>

的jQuery

$(document).on('paste', function(e) {
  $('#TA').focus();
  setTimeout(function() {
    $('#Data')
      .html($('#TA').val());
  });
});

除非 HTMLBody中有图像,否则非常有效。在那种情况下,我得到一个像这样的破碎图像src:

<img width=596 height=381
 id="Picture_x0020_1" 
 src="cid:image001.png@01D07855.C2524830"
>

有没有办法在VBA函数中编码图像数据,最好是作为数据URI?

2 个答案:

答案 0 :(得分:1)

  

SRC =&#34; CID:image001.png@01D07855.C2524830"

此类源字符串表示隐藏的附件,其PR_ATTACH_CONTENT_ID(DASL名称 - &#34; http://schemas.microsoft.com/mapi/proptag/0x3712001E&#34;)属性设置为image001.png@01D07855.C2524830值。您可以使用Outlook项目的Attachments属性查找图像。

有关详细信息,请参阅How to add an embedded image to an HTML message in Outlook 2010

答案 1 :(得分:0)

想出了一个解决方案,感谢Eugene将我指向了Attachments系列。 (我不知道它包含嵌入的图像。)

Sub HTMLClipboard()
  Dim M As MailItem, Buf As MSForms.DataObject
  Set M = ActiveExplorer().Selection.Item(1)
  Set Buf = New MSForms.DataObject

  b = M.HTMLBody

  Dim i As Integer
  For i = 1 To M.Attachments.Count
    fn = M.Attachments.Item(i).PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001E")
    If fn > "" Then
      M.Attachments.Item(i).SaveAsFile "d:\temp"
      base64 = EncodeFile("d:\temp")
      b = Replace(b, "cid:" & fn, "data:image/png;base64," & base64)
    End If
  Next
  Buf.SetText b
  Buf.PutInClipboard
End Sub

此代码:

  1. 遍历“附件”集合,查找嵌入的图像。
  2. 将图像保存到临时文件中。
  3. 使用此处的EncodeFile函数将图像二进制数据转换为base64:https://stackoverflow.com/a/8134022/3903374
  4. 使用base64编码替换每个图像的src属性,该编码将其转换为数据URI。
  5. 我对避免创建临时文件的方法感兴趣。

    我现在可以在Outlook中运行宏并粘贴到我的网页上,图像数据嵌入在HTML本身中。