我正在尝试将具有Indy 9的SMTP通过SMTP发送html电子邮件的功能添加到我的程序中。使用HTML语句),则可以正确发送电子邮件。我的问题在于将图片嵌入HTML流中。

HTML流将使用如下命令

<IMG SRC="cid:foo4atfoo1atbar.net" ALT="IETF logo">


尽管Indy 10组件TIdAttachmentFile具有ComponentID属性,其值必须设置为“ cid”引用的值,但我找不到在Indy 9中的何处设置ComponentID属性。

目前,用于添加图片的代码(其名称在laPicture.text中)如下所示

  if laPicture.text <> '' then
  with TIdAttachment.Create (email.MessageParts, laPicture.text) do
   begin
    ContentDisposition:= 'inline';
    ContentType:= 'image/jpeg';
    DisplayName:= ExtractFileName (laPicture.text);
    filename:= ExtractFileName (laPicture.text);
   end;


在哪里定义ContentID?

而且,尽管这是一个愚蠢的问题,但我如何知道我拥有的Indy版本?

最佳答案

TIdAttachment源自具有公共TIdMessagePart属性的ContentID。如果您安装的Indy 9版本没有该属性,则您使用的版本已过时,因此请使用ExtraHeaders属性来手动添加Content-ID标头。

请参阅Indy网站上的以下博客文章,以获取有关使用HTML电子邮件的更多信息:

HTML Messages

更新:因此,如果HTML显示cid:foo4atfoo1atbar.net,则需要在代码中进行匹配以使其匹配:

with TIdAttachment.Create (email.MessageParts, laPicture.text) do
begin
  ...
  ContentID := '<foo4atfoo1atbar.net>';
  // or this, if you do not have the ContentID property available:
  // ExtraHeaders.Values['Content-ID'] := '<foo4atfoo1atbar.net>';
end;


请注意,在Indy 9中,您必须手动提供括号。如果省略,Indy 10会为您插入它们,例如:

ContentID := 'foo4atfoo1atbar.net';

关于delphi - 使用带有嵌入式图片的Indy 9发送电子邮件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14279211/

10-12 14:13