在Delphi中,我使用以下代码在HTML中创建电子邮件,以在消息中显示签名:
cMsg:= cMsg + ' <img src="BarrysSignature.jpg" '>
这意味着我需要在当前目录中提供.jpg
(并将其与可执行文件一起分发(。
我也在程序的其他地方使用这些相同的签名.jpg
文件,但我已经将它们作为资源加载。如果我使用电子邮件中的签名资源,而不是外部.jpg
图片,那么在电子邮件中会更好。
我试过几种方法,但都没能奏效。有什么想法吗?
与@Dmitry的回答类似,在Indy中,您还需要将图像数据附加到电子邮件(TIdMessage
组件(,分配附件的Content-ID
标头(TIdMessagePart.ContentID
属性(,然后在需要时使用cid:
URL在HTML中引用该ID。
请参阅Indy网站上的这些博客文章,了解如何做到这一点:
HTML消息
新的HTML消息生成器类
不过,我确实想提一件事。在文章中谈到使用TIdAttachmentFile
作为附件的地方,在这种情况下,实际上根本不需要将图像资源保存到临时文件中。或者,您可以从TIdAttachment
派生自己的类(我们称之为TIdAttachmentResource
(,并让它覆盖虚拟OpenLoadStream()
和CloseLoadStream()
方法,以分别向资源数据返回/释放TResourceStream
(有关示例,请参阅TIdAttachmentFile
和TIdAttachmentMemory
的源代码(。然后,您可以根据需要简单地将TIdAttachmentResource
对象添加到TIdMessage.MessageParts
集合中,Indy将能够直接使用图像资源对电子邮件进行编码,而不需要文件。
在Outlook中,您需要将资源提取到临时文件中,将图像添加为附件,设置其PR_ATTACH_CONTENT_ID
MAPI属性,然后删除文件。您的HTML主体将需要通过其内容id来引用图像,例如<img src="cid:xyz">
,其中";xyz";是PR_ATTACH_CONTENT_ID
属性的值。
请参阅在Outlook电子邮件中包含图片