2013-01-11 50 views
1

我想添加到我的程序通过SMTP与Indy 9发送HTML电子邮件的能力。如果该程序只包含文本(文本将以希伯来语,所以我需要从右到左显示,这意味着我正在使用HTML语句),那么电子邮件将被正确发送。我的问题是将图片嵌入到HTML流中。发送电子邮件与Indy 9与嵌入式图片

HTML流将使用如下命令

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

尽管印第10部分TIdAttachmentFile具有的ComponentID属性,其价值已被设置为值“CID”的引用,我找不到在哪里设置的ComponentID属性在印第安纳波利斯9

目前,这与添加的图片(他的名字是在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?

+0

对于你的版本,你可以看看c:\ RAD Studio \ 9.0 \ source \ Indy10 \ Core \ IdCompilerDefines.inc –

+0

@ Arioch'The:我的电脑上该文件的路径是C:\ Program Files \ Borland \ Delphi7 \ Source \ Indy,并且在文件中没有版本号。该版本是Delphi 7发布的版本。 –

+0

@ No'amNewman:默认情况下,Delphi 7自带Indy 9。 – Martijn

回答

3

TIdAttachment派生自TIdMessagePart,它有一个公共ContentID属性。如果您安装的Indy 9版本没有该属性,那么您使用的是过时的版本,因此请使用ExtraHeaders属性来手动添加Content-ID标头。

看一看上印的网站下面的博客文章有关使用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中,您必须手动提供括号。印10将它们插入你,如果省略了它们,如:

ContentID := 'foo4atfoo1atbar.net'; 
+0

我今天下午阅读了引用文章;我问我的问题,因为它只显示TIDAttachmentFile.ContentID。 –

+0

再次仔细阅读。 “ContentID”是解决方案,文章确实对Indy 9也说过:“如果附件是HTML正在使用的图像或声音,那么您还要将** TIdAttachment.ContentID **属性设置为唯一HTML可以通过“cid”协议引用的值**例如,如果图像附件的ContentID属性是“image1”,那么HTML需要使用“cid:image1”作为任何的“src”属性显示该图像附件的元素。**“ –

+0

我在一个阶段看到'extraheaders'代码,但错过了尖括号。我现在已经添加了它们,程序正确地发送了带有嵌入式图片的电子邮件。谢谢。 –

0

我发现一个的解决方案 - 我并不需要Indy10不是内容ID字段。

我在我的问题中显示的代码很好,问题可能出现在显示图片的HTML代码中。我认为“cid”变量必须“指向”Content-ID的值;它蒸发它可以被设置到该文件(TIDAttachment.filename)的名称,如下

<img src="cid:' + ExtractFileName (laPicture.text) + '"><br> 

上面一行被在适当的位置插入到HTML流。

+0

HTML中指定的'cid'需要匹配附件的Content-ID头,而不是文件名。这就是'cid'代表的,afterall-cid = ContentID。如果附件有一个Content-ID:分配给它的头,'cid:filename'可以工作的唯一方法是。 –

+0

我更新了我的答案。 –

相关问题