Delphi-在电子邮件中使用资源而不是图像



在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(有关示例,请参阅TIdAttachmentFileTIdAttachmentMemory的源代码(。然后,您可以根据需要简单地将TIdAttachmentResource对象添加到TIdMessage.MessageParts集合中,Indy将能够直接使用图像资源对电子邮件进行编码,而不需要文件。

在Outlook中,您需要将资源提取到临时文件中,将图像添加为附件,设置其PR_ATTACH_CONTENT_IDMAPI属性,然后删除文件。您的HTML主体将需要通过其内容id来引用图像,例如<img src="cid:xyz">,其中";xyz";是PR_ATTACH_CONTENT_ID属性的值。

请参阅在Outlook电子邮件中包含图片

最新更新