VBA 发送邮件的正文图片插入方法——HTML引用附件法

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 大功告成

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是 VBA 代码,可以将 Excel 中的 Sheet 复制到 Outlook 邮件正文发送邮件: ```VBA Sub SendSheetInEmail() Dim outlookApp As Outlook.Application Dim outlookMail As Outlook.MailItem Dim excelSheet As Worksheet Dim tempFile As String 'Create a temporary file to store the sheet as an HTML file tempFile = Environ$("temp") & "\" & ActiveSheet.Name & ".html" ActiveSheet.PublishObjects.Add(xlSourceSheet, tempFile, ActiveSheet.Name, "", xlHtmlStatic).Publish (True) 'Create a new email Set outlookApp = New Outlook.Application Set outlookMail = outlookApp.CreateItem(olMailItem) 'Set the email properties With outlookMail .To = "recipient@example.com" .Subject = "Sheet " & ActiveSheet.Name & " from " & ThisWorkbook.Name .HTMLBody = "Hello," & vbCrLf & _ "Please find attached the sheet " & ActiveSheet.Name & " from " & ThisWorkbook.Name & "." & vbCrLf & _ "Best regards,<br>" & _ "Your Name" .Attachments.Add tempFile .Display 'or .Send to directly send the email End With 'Delete the temporary file Kill tempFile 'Clean up Set outlookMail = Nothing Set outlookApp = Nothing End Sub ``` 此代码将当前活动的 Sheet 复制为 HTML 文件,将该文件作为附件添加邮件中,并在邮件正文添加一条消息。 若要将多个 Sheet 添加邮件正文中,则需要将每个 Sheet 复制为 HTML 文件,并将所有文件合并为单个文件,然后将该文件添加邮件正文中。 请注意,此代码需要 Outlook 客户端才能发送邮件。 如果没有 Outlook 客户端,则需要使用其他方发送邮件,例如使用 SMTP 服务器发送邮件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值