Встраивание изображения в Outlook с помощью расширенных функций mapi

Мне нужно вставлять изображения в электронное письмо и предварительно просматривать его перед отправкой в ​​Outlook. CDO и Redemption не вариант.

Я пробовал следующий код, но изображения отображаются как небольшой блок.

  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;

person Phillip Roux    schedule 29.07.2010    source источник
comment
Вы используете формат HTML? Используете ли вы URL-адрес CID для встроенного изображения?   -  person Ben    schedule 16.06.2012
comment
@Ben Должен ли он использовать формат HTML? Есть ли решение, связанное с URL-адресом CID? я уверен, что он воспользуется тем, что даст ваш ответ, если вы используете MAPI и он работает, когда почтовым клиентом пользователя является Outlook.   -  person Ian Boyd    schedule 12.10.2012
comment
@IanBoyd, я полагаю, что он использует URL-адрес CID, теперь он знает о них...   -  person Ben    schedule 12.10.2012
comment
@Ben Ну, может быть, он не должен; возможно, проблема заключается в URL-адресах CID.   -  person Ian Boyd    schedule 12.10.2012
comment
@IanBoyd Я ожидаю, что он просто неправильно отформатировал URL-адрес CID, исправил его сам и не удосужился вернуться и рассказать нам.   -  person Ben    schedule 12.10.2012
comment
@IanBoyd, я опубликовал потенциальный ответ.   -  person Ben    schedule 15.10.2012


Ответы (1)


Спрашивающий не опубликовал свой HTML-текст. Я подозреваю, что проблема в том, что его URL-адреса CID были искажены - хотя я этого не проверял.

Если для заголовка Content-ID установлено следующее:

Content-Type: image/jpeg
Content-Disposition: inline
Content-ID: afd383988e86ad958709@u

Затем HTML должен ссылаться на него следующим образом:

<img width="100" height="100" href="cid:afd383988e86ad958709@u" />

В частности, URL-адрес cid должен иметь префикс «cid:», а заголовок content-id — нет. (Guid — хороший выбор для идентификатора контента, за исключением того, что он ДОЛЖЕН содержать символ @. Чтобы соответствовать, вы можете добавить «@u» к guid.)

Этого достаточно, чтобы электронная почта правильно отображалась на принимающей стороне. Сделает ли он предпросмотр в аутлуке правильно перед отправкой, не знаю.

Вы также можете увидеть этот вопрос:

person Ben    schedule 15.10.2012