vba 电子邮件嵌入图像未显示
Posted
技术标签:
【中文标题】vba 电子邮件嵌入图像未显示【英文标题】:vba email embed image not showing 【发布时间】:2015-02-17 02:14:32 【问题描述】:我在这里有一个奇怪的经历。我在使用 src=cid 将徽标或图像嵌入电子邮件时遇到了很多问题...发现如果不设置大小,它将不会显示。
我有一个要发送的 Access 应用程序,但已使用 Excel 将其分解为以下代码。
但是
如果我显示电子邮件然后发送它,它现在可以正常工作了。根本不做任何其他事情。只需显示然后发送。
如果我直接从 vba 发送,图像将无法正常显示。附件符号显示,Outlook 本身会将图像内联,但说 gmail,不会。这不是 gmail 的错误,因为 Outlook 中显示了 attachmet 符号。如果我显示然后发送,则不会。
我怀疑它仍然与尺寸或放置有关。如果没有宽度部分,Outlook 仍会在正确的位置显示图像,但仍显示为附件。因此,当您显示并按发送时,我必须设置另一个属性或其他东西。我不知道是什么!
希望有人可以提供帮助或有想法!我不是 HTLM 最强的,所以可能很简单……
谢谢
约翰
Sub test()
Dim oApp As Outlook.Application
Dim oEmail As MailItem
Dim colAttach As Outlook.Attachments
Dim oAttach As Outlook.Attachment
'create new Outlook MailItem
Set oApp = CreateObject("Outlook.Application")
Set oEmail = oApp.CreateItem(olMailItem)
'add graphic as attachment to Outlook message
'change path to graphic as needed
Set colAttach = oEmail.Attachments
Set oAttach = colAttach.Add("C:\temp\logo.jpg")
oEmail.Close olSave
'change the src property to 'cid:your picture filename'
'it will be changed to the correct cid when its sent.
oEmail.htmlBody = "<BODY><IMG src=""cid:logo.jpg"" width=200> </BODY>"
oEmail.Save
oEmail.To = "someemailtogoinhere@gmail.com"
oEmail.Subject = "test"
oEmail.Display
'oEmail.Send
Set oEmail = Nothing
Set colAttach = Nothing
Set oAttach = Nothing
Set oApp = Nothing
End Sub
【问题讨论】:
【参考方案1】:只是为了发布有效的简单代码形式。非常感谢@Eugene Astafiev。
Sub test()
Dim oApp As Outlook.Application
Dim oEmail As MailItem
Dim colAttach As Outlook.Attachments
Dim oAttach As Outlook.Attachment
Dim olkPA As Outlook.PropertyAccessor
Const PR_ATTACH_CONTENT_ID = "http://schemas.microsoft.com/mapi/proptag/0x3712001F"
'create new Outlook MailItem
Set oApp = CreateObject("Outlook.Application")
Set oEmail = oApp.CreateItem(olMailItem)
'add graphic as attachment to Outlook message
'change path to graphic as needed
Set colAttach = oEmail.Attachments
Set oAttach = colAttach.Add("C:\temp\logo.jpg")
Set olkPA = oAttach.PropertyAccessor
olkPA.SetProperty PR_ATTACH_CONTENT_ID, "logo.jpg"
oEmail.Close olSave
'change the src property to 'cid:your picture filename'
'it will be changed to the correct cid when its sent.
oEmail.HTMLBody = "<BODY><IMG src=""cid:logo.jpg""> </BODY>"
oEmail.Save
oEmail.To = "someemail@gmail.com"
oEmail.Subject = "test"
oEmail.Send
Set oEmail = Nothing
Set colAttach = Nothing
Set oAttach = Nothing
Set oApp = Nothing
End Sub
【讨论】:
【参考方案2】:您需要使用 Attachment.PropertyAccessor 在附件上设置 PR_ATTACH_CONTENT_ID 属性 (DASL - http://schemas.microsoft.com/mapi/proptag/0x3712001F)。请注意,附件类的 PropertyAccessor 属性是在 Outlook 2007 中添加的。
您可能会发现How do I embed image in Outlook Message in VBA? 链接很有帮助。
【讨论】:
我去看看,非常感谢!我自己的小修复是在显示后使用发送键按发送。它不漂亮,但似乎有效.. 你完全正确!稍微搜索一下该属性以及如何设置它就可以了!不幸的是,我无法评价这个,因为我在论坛上太新了。 我也不得不求助于 Sendkeys,因为安全策略阻止我使用 SetProperty。如果有人知道实现相同目标的解决方法/替代方法,我会全神贯注。以上是关于vba 电子邮件嵌入图像未显示的主要内容,如果未能解决你的问题,请参考以下文章
HTML 图像未显示在通过 VBA 中的 Gmail API 发送的 MIME 消息中,使用 3D
使用Excel VBA发送带有图表对象的电子邮件 - Office 2013