VBA调用Outlook发邮件时正文与签名字体大小不一致如何解决?
问题根因
- 你当前直接拼接正文HTML片段和签名HTML片段,两者是独立的样式体系,签名文件(Podpis.htm)本身自带内联字体配置,不会继承正文段落的样式设置
- 你之前编写的行内样式没有包裹引号,不符合标准CSS语法,Outlook内置的HTML解析器容错率较低,很可能直接忽略了你写的
font-size:14pt配置 - 零散的HTML片段没有统一的根样式约束,正文和签名的字体规则各自生效,自然会出现大小不一致的情况
修复方案
推荐通过构造完整HTML结构设置全局样式的方式解决,兼容性最强,不需要修改本地签名文件:
- 给整个邮件内容套入标准的
<html>、<head>、<body>标签结构 - 在
<head>中添加全局样式,统一设置所有内容的字体、字号 - 规范所有行内样式的写法,属性值用双引号包裹
- 如果你的签名本身有强制内联样式,可以额外加一步替换签名的字体规则,确保完全统一
完整修改后的代码
Sub Report() Dim OutApp As Object Dim OutMail As Object Dim strbody As String Dim SigString As String Dim Signature As String Dim htmlHead As String Set OutApp = CreateObject("Outlook.Application") Set OutMail = OutApp.CreateItem(0) ' 正文内容,规范style写法加双引号 strbody = "<p style=""font-family:arial;font-size:14pt"">Hi All,<br><br>" & _ "please see report.<br></p>" SigString = Environ("appdata") & _ "\Microsoft\Signatures\Podpis.htm" If Dir(SigString) <> "" Then Signature = GetBoiler(SigString) ' 可选:如果签名自带强制样式,加这两行替换统一字体 Signature = Replace(Signature, "font-family:", "font-family:arial!important;") Signature = Replace(Signature, "font-size:", "font-size:14pt!important;") Else Signature = "" End If ' 全局样式头,统一所有内容字体配置 htmlHead = "<!DOCTYPE html><html><head><style>" & _ "body, p, div, span {font-family:arial;font-size:14pt;}" & _ "</style></head><body>" On Error Resume Next With OutMail .SentOnBehalfOfName = "email@address.com" .To = "email@address.com" .CC = "email@address.com" .Subject = "Report" ' 拼接完整HTML结构 .HTMLBody = htmlHead & strbody & "<br>" & Signature & "</body></html>" .Display End With On Error GoTo 0 Set OutMail = Nothing Set OutApp = Nothing End Sub Function GetBoiler(ByVal sFile As String) As String Dim fso As Object Dim ts As Object Set fso = CreateObject("Scripting.FileSystemObject") Set ts = fso.GetFile(sFile).OpenAsTextStream(1, -2) GetBoiler = ts.readall ts.Close End Function
内容的提问来源于stack exchange,提问作者turbodebil
相关产品推荐
相关产品推荐

