求助,如何解析mime格式邮件内容。含8bit图片。如果能解决问题,支付100元现金请你吃饭(100分)

  • 主题发起人 主题发起人 zhbf2000
  • 开始时间 开始时间
Z

zhbf2000

Unregistered / Unconfirmed
GUEST, unregistred user!
因为是8bit编码,图片含 00字节, Tmail2000解析时好像有问题,应该四个部分,可只解出第一部分,请大侠解决。如果能解决问题,支付100元现金请你吃饭。qq:3899406 aspfan@163.com
样本文件:
http://disk.nje.cn/webdownload.aspx?fileid=130&sec=GR15FB5EE24CC82BFC2FE00AB9158E5990
 
附件里的 gif?
在 附件里 只看到了3个文件啊
 
this is a multi-part message in MIME format
 
就是解析HTTP协议数据流吧,有专门邮件协议的.
好像是什么 mixed....
 
mail2000确实有问题
我改了 一部分 还没改完
不过现在 可以看到 多个附件了
procedure TMailPart.LoadFromFile(FileName: string);
var
ms: TMemoryStream;
Buffer: PChar;
len: integer;
c_end: char;
begin
ms := TMemoryStream.Create;
ms.LoadFromFile(FileName);
len := ms.Size;
ms.Seek(0, soFromEnd);
c_end := #0;
ms.Write(c_end, 1);
ms.Position := 0;
Buffer := ms.Memory;
Fill(Buffer, True, len);
FreeAndNil(ms);
end;

procedure TMailPart.Fill(Data: PChar;
HasHeader: Boolean;
len: integer = 0);
const CRLF: array[0..2] of Char =(#13,#10,#0);
var
Loop: Integer;
BoundStart: array[0..99] of Char;
BoundEnd: array[0..99] of Char;
InBound: Boolean;
IsBoundStart: Boolean;
IsBoundEnd: Boolean;
BoundStartLen: Integer;
BoundEndLen: Integer;
PartText: PChar;
DataEnd: Boolean;
MultPart: Boolean;
NoParts: Boolean;
InUUCode: Boolean;
UUFile, UUBound: string;
Part: TMailPart;
nPos: Integer;
nLen: Integer;
nTL: Integer;
nSPos: Integer;
Line: PChar;
SChar: Char;
begin

if (FOwnerMessage = nil) or (not (FOwnerMessage is TMailMessage2000)) then
begin

Exception.CreateFmt(_E_MLPT, [Self.Name]);
Exit;
end;

for Loop := 0 to FSubPartList.Count - 1do
FSubPartList.Items[Loop].Destroy;
FHeader.Clear;
FBody.Clear;
FDecoded.Clear;
FSubPartList.Clear;
FIsDecoded := False;
FEmbedded := False;
FOwnerMessage.FNeedRebuild := True;
FOwnerMessage.FNeedNormalize := True;
FOwnerMessage.FNeedFindParts := True;
nPos := -1;
DataEnd := False;
if len <= 0 then
nTL := StrLen(Data)
else
nTL := len;
 
联系原作者,回复邮件上说已经不维护此项目了
 
mail2000 反正有代码 上边
我已经 改了 2处 地方
楼主 可以自己 改改啊
 
感谢hfghfghfg,我也改了一下
if IsBoundStart or IsBoundEnd then
begin

if (PartText <> nil) and (PartText[0] <> #0) then
begin

Part := TMailPart.Create(Self.FOwnerMessage);
Part.FOwnerPart := Self;
Part.FOwnerMessage := Self.FOwnerMessage;
//SChar := Data[nPos-2];
//Data[nPos-2] := #0;
Part.Fill(PartText, True, nPos-LastPos);
//utf-8需要解码
//Data[nPos-2] := SChar;

Part.FParentBoundary := GetBoundary;
FSubPartList.Add(Part);
PartText := nil;
end;

if IsBoundEnd then
begin

Break;
end;

IsBoundStart := False;
IsBoundEnd := False;
end
else
begin

if PartText = nil then
begin
[red]LastPos := nPos;[/red] PartText := Line;
end;
end;
问题基本解决。
 
后退
顶部