2010-07-29 107 views
5

我需要在電子郵件中嵌入圖像並在Outlook中發送電子郵件之前預覽電子郵件。 CDO和贖回不是一種選擇。使用擴展的mapi功能將圖像嵌入到Outlook

我試過下面的代碼,但圖像只是作爲一個小塊出現。

procedure AddAttachment(FullFileName: String; Attachments: Outlook2000.Attachments; CID: String); 
    const 
    PR_ATTACH_CONTENT_ID = $3712001E; 
    PR_ATTACH_CONTENT_ID_W = $3712001F; // Unicode 
    PR_ATTACH_MIME_TAG  = $370E001E; 
    PR_ATTACH_ENCODING  = $37020102; 
    var 
    IAttach: IMAPIProp; 
    Prop: PSPropValue; 
    AAttachment: Outlook2000.Attachment; 
    FileName: String; 
    PropValue: TSPropValue; 
    Prop1: TSPropTagArray; 
    begin 
    FileName := ExtractFileName(FullFileName); 
    Prop := nil; 
    try 
     AAttachment := Attachments.Add(FullFileName, olByValue, 1, FileName); 
     IAttach := AAttachment.MAPIOBJECT as IMAPIProp; 
     if Assigned(IAttach) then 
     try 
      PropValue.ulPropTag := PR_ATTACH_MIME_TAG; 
      PropValue.Value.lpszA := 'image/jpeg'; 
      HrSetOneProp(IAttach, @PropValue); 
      PropValue.ulPropTag := PR_ATTACH_CONTENT_ID; 
      PropValue.Value.lpszA := PAnsiChar(AnsiString(CID)); 
      HrSetOneProp(IAttach, @PropValue); 
     finally 
      if Assigned(Prop) then MAPIFreeBuffer(Prop); 
      IAttach := nil; 
     end; 
    except 
    end; 
    end; 
+0

是否使用HTML格式?您是否使用嵌入圖片的CID網址? – Ben 2012-06-16 10:23:37

+0

@Ben他應該使用HTML格式嗎?有沒有涉及CID URL的解決方案?我相信他會使用你的答案給出的任何東西 - 只要你使用MAPI,並且當用戶的電子郵件客戶端是Outlook時,它就可以工作。 – 2012-10-12 13:31:43

+1

@IanBoyd,我希望他**是**使用CID URL *現在他知道他們* ... – Ben 2012-10-12 13:42:36

回答

1

提問還沒有公佈他的HTML文本。我懷疑問題在於他的CID網址格式不正確 - 但我沒有測試過。

如果Content-ID頭被設置成這樣:

Content-Type: image/jpeg 
Content-Disposition: inline 
Content-ID: [email protected] 

那麼HTML應引用它像這樣:

<img width="100" height="100" href="cid:[email protected]" /> 

尤其是CID URL必須有前綴「CID :「但content-id頭不能。 (一個guid是一個內容id的不錯選擇,除了它必須包含一個@符號。爲了符合,你可以在guid中附加'@u'。)

這足以讓電子郵件正確顯示在接收端。在發送之前是否會正確預覽Outlook,我不知道。

您不妨也看到了這個問題:

+0

先生,你的兩個+1。 – 2012-10-15 15:14:16