2010-07-29 14 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