Tja, MIME ist eine komplizierte Sache.
Ich kann dir mal meinen Code zeigen, den ich verwende um die Mailtexte einfach anzuzeigen. Dabei wird falls nötig auch der HTML Teil in Text umgewandelt.
Bei Attachments wird nur der Dateiname angezeigt. Auskommentiert ist der Teil zum speichern.
Falls dir das hilft: Sehr gut. Ist aber natürlich nicht vollständig.
Falls nicht, dann lass es. Ohne Eigeninitiative kommst du hierbei nicht weiter und ich werde dich nicht durch den Dschungel führen können.
Code: Alles auswählen
function TPop3Account.RetrMail(num: integer): string;
var PlainTxt: TStringList;
HaveText, HasAttachments: Boolean;
Mime: TPop3Message; //Abkömmling von TMimeMess. Der Teil sollte auch mit der Elternklasse klappen.
procedure _DecodePart(Part: TMimePart);
var i: integer;
S: string;
PP, PS: string;
begin
Part.DecomposeParts;
Part.DecodePart;
PP := UpperCase(Part.Primary);
PS := UpperCase(Part.Secondary);
if PP <> 'MULTIPART' then
begin
Part.DecodedLines.Seek(0, soFromBeginning);
if PP = 'TEXT' then
begin
if (PS = 'PLAIN') then
begin
SetLength(S, Part.DecodedLines.Size);
Part.DecodedLines.Read(S[1], Length(S));
PlainTxt.Add(S);
HaveText := true;
end;
if (PS = 'HTML') and (not HaveText) then
begin
SetLength(S, Part.DecodedLines.Size);
Part.DecodedLines.Read(S[1], Length(S));
PlainTxt.Add(RemoveHTMLTags(S));
end;
end else
begin
if Part.FileName <> '' then
begin
if not HasAttachments then
begin
PlainTxt.Add('Attachments:');
HasAttachments := true;
end;
//Fn := SavePath + Part.Filename;
//Part.DecodedLines.SaveToFile(Fn);
PlainTxt.Add('-> ' + Part.FileName);
end;
end;
end;
for i := 0 to Part.GetSubPartCount - 1 do
begin
_DecodePart(Part.GetSubPart(i)); //Rekursiver Aufruf weil Multipart geschachtelt sein kann.
end;
end;
begin
HaveText := false;
HasAttachments := false;
if (fPop3Send.Login) then
begin
if fPop3Send.Retr(num) then
begin
Mime := TPop3Message.Create;
Mime.Lines.Assign(fPop3Send.FullResult);
fPop3Send.FullResult.Clear;
try
Mime.DecodeMessage;
PlainTxt := TStringList.create;
_DecodePart(Mime.MessagePart); //Rekursiv alle parts dekodieren
Result := PlainTxt.text;
finally
PlainTxt.free;
Mime.free;
end;
end;
if fPop3Send.Logout then
begin
end;
end;
end;