如何在Delphi应用程序中阅读HTML格式的电子邮件?

时间:2011-02-22 10:00:21

标签: delphi imap delphi-2007 html-email indy10

我创建了一个可以从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 个答案:

答案 0 :(得分:3)

MIME编码电子邮件的内容(如HTML电子邮件(如果纯文本和/或附件也存在))存储在TIdMessage.MessageParts属性中,而不是TIdMessage.Body属性中。您需要查看电子邮件的实际ContentType属性,以了解哪个属性TIdMessage已将电子邮件解析为。

答案 1 :(得分:0)

使用MAPI,我通常会尝试将PR_BODY_HTML属性作为字符串;如果那是空的,我会检索PR_HTML属性。

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

这通常对我有用。当然,也许你完全使用不同的技术,但是你没有给我们太多的工作......