使用Delphi读取EML文件并提取纯文本的技术疑问
提取EML纯文本的问题与现有实现
我需要读取EML文件并提取其中无标签的完整纯文本。目前用TIdMessage组件遍历TIdMessage.MessageParts,通过判断PartType是否为mptText来处理,这部分运行正常,但当TIdMessage.Encoding为TIdMessageEncoding.meMIME时,无法正确解析该格式的邮件内容。另外想确认:所有邮件中是否一定存在text/plain部分?
我已经编写了两个用于获取邮件HTML内容的函数:
function GetMultiPartAlternative(aMsg: TIdMessage; aParentIndex, aLastIndex: Integer): String; var Part: TIdMessagePart; i: Integer; begin Result := ''; for i := aLastIndex - 1 downto aParentIndex + 1 do begin Part := aMsg.MessageParts.Items[i]; if { (Part.ParentPart = aParentIndex) and } (Part is TIdText) then begin if Part.ContentType.StartsWith('text/html') then begin Result := (Part as TIdText).Body.Text; Exit; end else if Part.ContentType.StartsWith('text/plain') then begin Result := (Part as TIdText).Body.Text; Exit; end; end; end; end; function GetMultiPartMixed(aMsg: TIdMessage; aParentIndex, aLastIndex: Integer): String; var Part: TIdMessagePart; i: Integer; begin Result := ''; for i := aLastIndex - 1 downto aParentIndex + 1 do begin Part := aMsg.MessageParts.Items[i]; if { (Part.ParentPart = aParentIndex) and } (Part is TIdText) then begin if Part.ContentType.StartsWith('multipart/alternative') then begin Result := GetMultiPartAlternative(aMsg, aParentIndex, aLastIndex); Exit; end else if Part.ContentType.StartsWith('text/html') then begin Result := (Part as TIdText).Body.Text; Exit; end else if Part.ContentType.StartsWith('text/plain') then begin Result := (Part as TIdText).Body.Text; Exit; end; aLastIndex := i; end; end; end;
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

