2010-07-29 6 views
5

Ich brauche Bilder in einer E-Mail einzubetten und die E-Mail-Vorschau, bevor es in Outlook gesendet wird. CDO und Rückzahlung ist keine Option.Einbetten Bild Outlook erweitert mapi Funktionen

Ich habe den folgenden Code versucht, aber die Bilder erscheinen nur als kleinen Block.

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

Verwenden Sie HTML-Format? Verwenden Sie eine CID-URL für das eingebettete Bild? – Ben

+0

@Ben Sollte er HTML-Format verwenden? Gibt es eine Lösung mit einer CID-URL? Ich bin sicher, er wird verwenden, was auch immer Ihre Antwort gibt - solange Sie MAPI verwenden und es funktioniert, wenn der E-Mail-Client des Benutzers Outlook ist. –

+1

@IanBoyd, ich erwarte, dass er ** eine CID URL benutzt * jetzt weiß er von ihnen * ... – Ben

Antwort

1

Der Fragesteller hat seinen HTML-Text nicht veröffentlicht. Ich vermute, das Problem ist, dass seine CID-URLs falsch waren - ich habe das noch nicht getestet.

Wenn der Content-ID-Header dieser festgelegt ist:

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

Dann sollte der HTML es wie so Referenz:

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

Insbesondere muss die cid URL das Präfix „cid haben : "aber der Content-ID-Header darf nicht. (Eine GUID ist eine gute Wahl für eine Content-ID, außer dass sie ein @-Symbol enthalten muss. Um dies zu erfüllen, können Sie '@u' an die GUID anhängen.)

Das reicht aus, damit die E-Mail korrekt angezeigt wird am empfangenden Ende. Ob es eine Vorschau in Outlook korrekt vor dem Senden macht, weiß ich nicht.

Möglicherweise möchten Sie auch diese Frage sehen:

+0

Zwei + 1 für Sie, Sir. –

Verwandte Themen