使用VBA向邮件插入图片:内部邮箱正常Gmail不显示求助
问题描述
我在Excel中运行以下VBA代码向客户发送邮件,尝试在邮件正文中插入图片。该代码发送至内部Outlook邮箱时可正常显示图片,但发送至个人Gmail邮箱时图片无法显示,推测原因可能是信纸(LetterHead)文件路径位于公司网络驱动器中。
Dim MItem As Outlook.MailItem Dim LetterHead As String LetterHead = "file path to .png file located in company network drive" For x = 1 To xlList.DataBodyRange.Rows.Count Set MItem = OutlookApp.CreateItem(olMailItem) PolNum = xlList.DataBodyRange.Cells(x, 7).Value PolSubj = Subj & PolNum With MItem .To = EmailAddr .Subject = PolSubj .HTMLBody = "<center><img src=" & Chr(34) & LetterHead & Chr(34) & "></center>" & StrBody & .HTMLBody .Send End With
解决方案
问题根源是Gmail无法访问公司内网的网络路径,必须将图片嵌入邮件内容而非引用外部路径。可以通过将图片添加为邮件附件并使用CID(Content ID)引用的方式解决,具体修改代码如下:
Dim MItem As Outlook.MailItem Dim LetterHead As String Dim att As Attachment LetterHead = "file path to .png file located in company network drive" For x = 1 To xlList.DataBodyRange.Rows.Count Set MItem = OutlookApp.CreateItem(olMailItem) PolNum = xlList.DataBodyRange.Cells(x, 7).Value PolSubj = Subj & PolNum With MItem .To = EmailAddr .Subject = PolSubj ' 添加图片为附件,并设置隐藏(不在附件列表显示) Set att = .Attachments.Add(LetterHead, olByValue, 0) ' 为附件设置唯一CID att.PropertyAccessor.SetProperty "http://schemas.microsoft.com/mapi/proptag/0x3712001F", "LetterHeadImage" ' 使用CID引用图片,替换原路径引用 .HTMLBody = "<center><img src='cid:LetterHeadImage'></center>" & StrBody & .HTMLBody .Send End With Set att = Nothing Set MItem = Nothing Next x
修改说明
- 将图片添加为邮件附件,参数
olByValue表示作为文件附件,第三个参数0设置附件为隐藏(不会在邮件的附件列表中显示) - 通过
PropertyAccessor为附件设置唯一的CID标识(这里用LetterHeadImage) - 在HTML正文中用
cid:LetterHeadImage引用该图片,确保邮件客户端能直接从邮件内容中读取图片,无需访问外部路径
内容的提问来源于stack exchange,提问作者B Ruppert
相关产品推荐
相关产品推荐

