2013-01-11 87 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

我更新了我的答案。 –

相關問題