Как я могу читать электронную почту в формате HTML в приложении Delphi? - PullRequest
0 голосов
/ 22 февраля 2011

Я создал программу, которая может читать электронную почту из Exchange 2007. Тем не менее, она может читать только тело письма в текстовом формате. Когда я пытался получить электронную почту в формате HTML, мое программное обеспечение не может прочитать тело, и оно всегда пустое. Я использую Delphi 2007 и IMAP 9.

Обновление:

Вот мой код:

procedure TForm1.tmrCekTimer(Sender: TObject);
var
  TheFlags: TIdMessageFlagsSet;
  TheUID: string;
  TheMsg: TIdMessage;
  MailBoxName: string;
  MyClass: TComponent;
begin
  MailBoxName := 'INBOX';
  if TheImap.SelectMailBox(MailBoxName) = False then
  begin
    Screen.Cursor := crDefault;
    ShowMessage('Error selecting '+MailBoxName);
    Exit;
  end;
  TheMsg := TIdMessage.Create(nil);
  nCount := TheImap.MailBox.TotalMsgs;
  TheMsg.ContentType := 'multipart/alternative';
  TheMsg.Encoding := meMime;
  if nCount = 0 then begin
    StringGrid1.RowCount := 2;
    StringGrid1.Cells[0, 1] := '';
    StringGrid1.Cells[1, 1] := '';
    StringGrid1.Cells[2, 1] := '';
    StringGrid1.Cells[3, 1] := '';
    ShowMessage('There are no messages in '+MailBoxName);
  end else begin
    StringGrid1.RowCount := nCount + 1;
    for i := 0 to nCount-1 do begin
      TheImap.GetUID(i+1, TheUID);
      TheImap.UIDRetrieveFlags(TheUID, TheFlags);
      TheImap.UIDRetrieve(TheUID, TheMsg);
      //TheImap.UIDRetrieveHeader(TheUID, TheMsg);
      StringGrid1.Cells[0, i+1] := IntToStr(i+1);
      StringGrid1.Cells[1, i+1] := TheMsg.From.Address;
      //StringGrid1.Cells[1, i+1] := TheUID;
      if mfSeen in TheFlags then
        StringGrid1.Cells[2, i+1] := 'Yes'
      else begin
        StringGrid1.Cells[2, i+1] := 'No';
      end;
    end;
 end;

Ответы [ 2 ]

3 голосов
/ 17 марта 2011

Содержимое сообщений электронной почты в формате MIME, например сообщений электронной почты в формате HTML (если текстовые и / или вложения также присутствуют), хранится в свойстве TIdMessage.MessageParts, а не в свойстве TIdMessage.Body. Вам нужно посмотреть фактическое свойство ContentType письма, чтобы узнать, в какое свойство TIdMessage было проанализировано письмо.

0 голосов
/ 22 февраля 2011

Используя MAPI, я обычно пытаюсь получить свойство PR_BODY_HTML в виде строки; если он пуст, я получаю свойство PR_HTML.

  const
    PR_HTML = $10130102;
    PR_BODY_HTML = $1013001E;

Это обычно работает для меня. Конечно, может быть, вы вообще используете разные технологии, но вы не даете нам много работы с ...

...