我创建了一个可以从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;
答案 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;
这通常对我有用。当然,也许你完全使用不同的技术,但是你没有给我们太多的工作......