VBA 发送邮件的正文图片插入方法——HTML引用附件法
{"作者":"Antoniothefuture"
"关键词":["VBA","Outlook","发送邮件","HTML"]
"开发平台":"不限"
"开发语言":"VBA"
"简介": "VBA 发送邮件的正文图片插入方法——HTML引用附件法"
}
近期在做一个批量发送邮件的VBA程序,文本可以发,但是插入图片时遇到了难题,我先将word保存为html格式,然后用FSO(File System Object)读取文本并直接赋值到邮件对象(Outlook.MailItem) 的.HtmlBody 里,文本可以显示,但是图片显示不出来,其实问题也显而易见的,Word保存为Html时,图片不会随文件一起保存,而是另外放在一个文件夹了(Docx其实是一种压缩包) ,只有本机可以加载该图片,发送邮件后,由于图片没有传到服务器上,因此收件人并不会看到你的图片。
我参考这位同志的文章之后,才知道可以通过引用附件的方法来插入图片,但是他是直接拼接HTML,我的是完整的HTML,因此需要用到一种骚操作:
首先我随机定义了一个字符串,而且需要确保该字符串在正常情况下,被人写到正文里的概率很小:
S = “OIUGIQLKDNGOD" (乱写的)
然后我将所有需要插入的图片路径放在字典对象里,key为该字符串加上一个自增变量,然后是图像的路径:(关于字典对象的其他骚操作可以翻翻我的其他文章)
N = N + 1
ImgDic.add S & N & S,ImgPath
在word保存为html格式之前,在需要插入图片的地方,插入该字符串:
TempDoc.Range(r1,r2).text = S & N
然后保存为HTML格式,用FSO读取文件中的所有字符,然后遍历字典对象,用replace将图片组装为html <img>节点,同时邮件添加附件
HtmlStr = FSOTextStream.ReadAll
DicKeys = ImgDic.keys
for i = 0 to DicKeys.count - 1
ImgFileName = GetFileName(ImgDic(DicKeys(i)))
NodeStr = "<img id = ""_" & ImgFileName & """ src=”“cid:" & ImgFileName * """>"
HtmlStr = replace(HtmlStr,DicKeys(i),NodeStr)
objOutlookMsg.attachments.add ImgDic(DicKeys(i))
next
objOutlookMsg.send 大功告成