POP3 mit Synapse

Alle Fragen zur Netzwerkkommunikation
TT73GP7
Beiträge: 238
Registriert: Di 29. Mär 2016, 20:45

Re: POP3 mit Synapse

Beitrag von TT73GP7 »

Hallo zusammen,

mal wieder mein Lieblingsthema Namens E-Mail
also eine Liste der Emails bekomme ich raus.

ich bekomme auch die Texte der Einzelnen Emails raus

Code: Alles auswählen

  mmess.Lines.Assign(pop.FullResult)
  mmess.DecodeMessage
 
  y:=mmess.MessagePart.PartBody.Count;
for x:=0 to y-1 do
  memo1.Lines.Add(DecodeQuotedPrintable(mmess.MessagePart.PartBody[x]));



Gut :)
nur Frage ich mich immer noch ob ich auch Anhänge rausbekomme?
beim versenden habe ich ja die Möglichkeit mit AddPartBinaryFromFile
gibt es auch sowas in der Art um aus der Message rauszubekommen?

und wie Lösche ich E-Mails auf dem Server?

VG
Igor

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: POP3 mit Synapse

Beitrag von theo »

TT73GP7 hat geschrieben:und wie Lösche ich E-Mails auf dem Server?


Das geht mit Dele. Man muss eingeloggt sein.
http://synapse.ararat.cz/doc/help/pop3s ... .html#Dele

Die Sache mit dem Attachment ist etwas schwieriger.
Vielleicht hilft das: https://stackoverflow.com/questions/139 ... -tmimemess

TT73GP7
Beiträge: 238
Registriert: Di 29. Mär 2016, 20:45

Re: POP3 mit Synapse

Beitrag von TT73GP7 »

hach und wieder mails,

also irgendwie scheint das noch nicht das richtige zusein so die Mailbodys abzuholen.

Code: Alles auswählen

 
pop.Stat;     
sc := pop.statcount;
for k := 1 to sc do  begin     
  pop.Retr(k);
  msg.Lines.Assign(pop.FullResult);     
  msg.DecodeMessage;     
  memo1.Lines.Add('  Date:       ' + FormatDateTime('DD.MM.YYYY    HH:MM', msg.Header.Date));   
  memo1.Lines.Add('  from:       ' + msg.Header.From);
  memo1.Lines.Add('  subject:    ' + msg.Header.Subject);
  memo1.Lines.Add('  organisation: ' + msg.Header.Organization);
  memo1.Lines.Add('  messageid:    ' + msg.Header.MessageID);
  memo1.Lines.Add(' ');
 
  y := msg.MessagePart.PartBody.Count;
  for k := 1 to sc do  begin
    memo1.Lines.Add(DecodeQuotedPrintable(msg.MessagePart.PartBody[x]));   
  end;
end;
 


Teilweise geht es ganz gut
nur es kommen keine HTML Mails an :(
Teilweise kommen die Mails sehr kryptisch an
Teilweise Textnachrichten gehen in der Regel recht gut (es sei denn Sie werden mit Outlook verschickt da gehen auch reine Textnachrichten nicht)

an was kann das liegen?
welche Alternativen gibt es?

ich will endlich das Thema von Tisch haben :(

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: POP3 mit Synapse

Beitrag von theo »

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. :wink:

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;   

Antworten