POP3 mit Synapse

Alle Fragen zur Netzwerkkommunikation

Re: POP3 mit Synapse

Beitragvon TT73GP7 » 1. Mai 2017, 07:39 Re: POP3 mit Synapse

hmm ich habe das mal versucht nachzubauen

aber irgendwie geht das bei mir nicht

also einloggen geht ohne probleme
aber der rest funktioniert nicht :(

schade
hätte mich sehr interresiert

Code: Alles auswählen
 
procedure TfrmMailclient.btnAbholenClick(Sender: TObject);
var
  pop:TPOP3Send;
  sc : Integer;
  k  : Integer;
  msg: Tmimemess;
begin
  pop:=TPOP3Send.create;
  try
      pop.AutoTLS := True;
      pop.Username:='kontakt@bla.de'; // hier gebe ich meine Daten ein
      pop.Password:='TTgghak324'; // hier gebe ich meine Daten ein
      pop.TargetHost:='pop.1und1.de'; // hier gebe ich meine Daten ein
      pop.AuthType:=POP3AuthAll;
      pop.login;
 
      pop.list(0);
 
      memo1.lines.Assign(pop.FullResult);
      pop.Retr(1);
     // pop.top(1,0);
      memo1.lines.Assign(pop.FullResult);
 //     pop.logout;
    finally
   //   pop.free;
    end;
 
  if (not pop.Login) then
  begin
    memo1.Lines.Add('POP login failed.');
    exit;
  end;
  pop.list(0);
  memo1.Lines.Assign(pop.FullResult);
 
 
  pop.Stat
  sc := pop.statcount;   
  for k := 1 to sc do
  begin
    pop.Retr(k);   
  //  msg.Clear; hier hat er ein Problem
    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(' ');
  end;
 
 
  pop.logout;
  pop.Free;   
end;
 
TT73GP7
 
Beiträge: 228
Registriert: 29. Mär 2016, 19:45

Beitragvon theo » 1. Mai 2017, 11:56 Re: POP3 mit Synapse

TT73GP7 hat geschrieben:also einloggen geht ohne probleme

Woher weißt du das?

TT73GP7 hat geschrieben:aber der rest funktioniert nicht :(

Was heißt das?
theo
 
Beiträge: 8166
Registriert: 11. Sep 2006, 18:01

Beitragvon Michl » 1. Mai 2017, 12:35 Re: POP3 mit Synapse

Evtl. noch pop.TargetPort setzen?

Übrigens betreue ich auch mehrere Webseiten von 1und1 mit zugehörigen Mailadressen, nutze aber SMTP (1und1: Host: smtp.1und1.de, Port: 587) statt Pop3. Funktioniert tadellos hier (hab mal die Methode beigefügt, ist aber speziell für die Anwendung hier).

Code: Alles auswählen
uses ..., mimemess, smtpsend, blcksock, synachar, mimepart;
type
  TSendFrom = record
    mail     : String;
    password : String;
    host     : String;
    port     : String;
  end;
...
procedure TForm1.OnMailStatus(Sender: TObject; Reason: THookSocketReason;
  const Value: string);
var
  aPos: Integer;
begin
  if (Reason = HR_WriteCount) and (StrToIntDef(Value, 0) > 10) then
  begin
    aPos := StrToIntDef(Value, 0);
    Application.ProcessMessages;
    Caption := 'Sende Mail an ' + Query.FieldByName('email').AsString + ' ' + IntToStr(aPos);
  end;
end;
 
function TForm1.SendCurrentMailOK: Boolean;
var
  i: Integer;
  Mime : TMimeMess;
  SMTP : TSMTPSend;
  SendFromData: TSendFrom;
  MCCList: TStringList;
  PartText: TStringList;
  SendTo: String;
begin
  Result := False;
 
  SendTo := Query.FieldByName('email').AsString;
  MCCList := TStringList.Create;
  Mime := TMimeMess.Create;
  SMTP := TSmtpSend.Create;
  PartText := TStringList.Create;
  try
    // Mails, falls mehrere, erste als Email, restl. CC (String in Datenbank mit Semikolon getrennt)
    for i := 2 to WordCount(SendTo, [';']) do
      MCCList.Add(Trim(ExtractWord(i, SendTo, [';'])));
    // wenn benötigt, CC zum Auftraggeber
    MCCList.AddStrings(DA.GetSendCCEmailAdresses(Employer));
 
    SendTo := Trim(ExtractWord(1, SendTo, [';']));
 
    // Logindaten setzen
    SendFromData := DA.GetSendFromEmailData(Employer);
    SMTP.TargetPort := SendFromData.port;
    SMTP.UserName   := SendFromData.mail;
    SMTP.Password   := SendFromData.password;
    SMTP.TargetHost := SendFromData.host;
 
    // Statusanzeige verlinken
    SMTP.Sock.OnStatus := @OnMailStatus;
 
    //SMTP Login
    if not SMTP.Login then exit;
 
    // Füllen der Maildaten
    Mime.Header.CharsetCode := UTF_8;
    Mime.Header.From := SendFromData.mail;
    Mime.Header.ReplyTo := '';
    Mime.Header.ToList.Add(SendTo);
    for i := 0 to MCCList.Count - 1 do
      Mime.Header.CCList.Add(MCCList[i]);
    Mime.Header.Subject := EditSubject.Text//Betreffzeile
    Mime.MessagePart.CharsetCode := UTF_8;
    Mime.AddPartMultipart('', Nil);
    PartText.Text := ParsedMailText;
    Mime.AddPartTextEx(PartText, Mime.MessagePart, UTF_8, True, ME_8BIT);
 
    // Mailanhänge dazu
    for i := 0 to ListBoxSendFiles.Count - 1 do
      Mime.AddPartBinaryFromFile(GetPhysicalFile(ListBoxSendFiles.Items[i]),
                                 Mime.MessagePart);
 
    Mime.EncodeMessage;
 
    // Senden
    try
      if not SMTP.MailFrom(SendFromData.mail, Length(Mime.Lines.Text)) then
        raise Exception.Create('[1] Failed to create mail from [' + SendFromData.mail + ']');
      if not SMTP.MailTo(SendTo) then
        raise Exception.Create('[2] Failed to send mail to [' + SendTo + ']');
      for i := 0 to MCCList.Count - 1 do
        if not SMTP.MailTo(MCCList[i]) then
          raise Exception.Create('[3] Failed to send CC mail to [' + MCCList[i] + ']');
      if not SMTP.MailTo(SendFromData.mail) then
        raise Exception.Create('[4] Failed to send mail to me [' + SendFromData.mail + ']'); // noch an AG selbst schicken
      if not SMTP.MailData(Mime.Lines) then
        raise Exception.Create('[5] Failed to send mail data [' + SendTo + ']');
 
      Result := True;
    except
      on e: Exception do
        ShowMessage('SendCurrentMailOK Error: ' + e.Message);
    end;
  finally
    SMTP.Logout;
    PartText.Free;
    Mime.Free;
    SMTP.Free;
    MCCList.Free;
  end;
end
Code: Alles auswählen
type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 
Michl
 
Beiträge: 2320
Registriert: 19. Jun 2012, 11:54
OS, Lazarus, FPC: Win7 Laz 1.7 Trunk FPC 3.1.1 Trunk | 
CPU-Target: 32Bit/64bit
Nach oben

Beitragvon TT73GP7 » 24. Jul 2017, 12:53 Re: POP3 mit Synapse

so nun komme ich endlich mal wieder zu meinen Lieblings Thema

SMTP und POP3 sind doch zwei verschiedene dinge
-> SMTP wird doch benutzt um email zuschicken (das bekomme ich auch super hin)
-> POP3/IMAP werden doch genug um E-Mails von Server abzurufen

das verschicken funktioniert bei mir auch Tadellos
nur das empfangen geht überhaupt nicht

ich finde da auch keine wirklichen Beispiele dazu
TT73GP7
 
Beiträge: 228
Registriert: 29. Mär 2016, 19:45

Beitragvon TT73GP7 » 24. Jul 2017, 14:44 Re: POP3 mit Synapse

soooo

ich habe mir mal ein beispiel neu zusammen gebastelt wo ich denke das könnte funktionieren.

irgendwie bekomme ich es noch nichtmal hin mich anzumelden :(
wenn ich die daten per hand in einen mailclient eingebe funktioniert alles wie gewollt

kann sich einer mal das beispiel ansehen und mir mal sagen was wie wo falsch ist?
ich konne einfach nicht auf die lösung
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
TT73GP7
 
Beiträge: 228
Registriert: 29. Mär 2016, 19:45

Beitragvon TT73GP7 » 24. Jul 2017, 14:54 Re: POP3 mit Synapse

so irgendwo gelesen das man noch openSSL hinzufügen soll

gesagt getan
leider immer noch nicht das ergebnis welches ich gerne hätte :(
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
TT73GP7
 
Beiträge: 228
Registriert: 29. Mär 2016, 19:45

Beitragvon braunbär » 24. Jul 2017, 16:23 Re: POP3 mit Synapse

Ich habe das jetzt nur kurz überflogen. Vielleicht habe ich es übersehen, aber irgendwie fehlt mir ein
Code: Alles auswählen
msg:=TMimemess.create;
 

bevor du auf msg zugreifst.
braunbär
 
Beiträge: 286
Registriert: 8. Jun 2017, 17:21

Beitragvon TT73GP7 » 25. Jul 2017, 07:48 Re: POP3 mit Synapse

hach soweit komme ich ja noch nichtmal zur zeit

der Login geht ja garnicht
ich bekomme die Meldung das der Login Faild

aber ich hab es Eingebaut

--Edit ich sollte am frühen morgen mehr Kaffee trinken
TT73GP7
 
Beiträge: 228
Registriert: 29. Mär 2016, 19:45

Beitragvon theo » 25. Jul 2017, 08:32 Re: POP3 mit Synapse

Da kommt keiner mehr mit, was du da machst.

Du schreibst oben: "also einloggen geht ohne probleme"
Darauf fragte ich dich: "Woher weißt du das?"

Keine Antwort.

Jetzt schreibst du: "der Login geht ja garnicht, ich bekomme die Meldung das der Login Faild"

Ja was denn jetzt?

Sorgfältiger arbeiten (und schreiben) wäre in jedem Falle ein Hilfe.
Auch im Code, da logst du ein und dann nochmal, ohne vorher auszuloggen und erst beim zweiten Mal käme dann eine Meldung: "POP login failed."
So kommt man doch nicht weiter.
theo
 
Beiträge: 8166
Registriert: 11. Sep 2006, 18:01

Beitragvon TT73GP7 » 27. Jul 2017, 08:35 Re: POP3 mit Synapse

hach ich sollte aufhören immer Code zu kopieren und die Kommentare drin zulassen.

Irgendwie hat sich die Lage auch geändert.
ich bin der Meinung das das Einloggen auch ging

nun scheint es aber nicht mehr zulaufen :(

er hapert wohl schon an dieser stelle und ich weiß nicht warum:
Code: Alles auswählen
 
 procedure TfrmMailclient.btnAbholenClick(Sender: TObject);
   var 
    pop:TPOP3Send; 
    sc : Integer; 
    k  : Integer; 
    msg: Tmimemess;
begin 
 
pop:=TPOP3Send.create
  try     
   pop.AutoTLS := True;     
   pop.Username:='kontakt@bla.de'; // hier gebe ich meine Daten ein     
   pop.Password:='TTgghak324'; // hier gebe ich meine Daten ein     
   pop.TargetHost:='pop.1und1.de'; // hier gebe ich meine Daten ein     
   pop.AuthType:=POP3AuthAll;     
   pop.login;       
   pop.list(0);       
   memo1.lines.Assign(pop.FullResult);     
   pop.Retr(1);     
   memo1.lines.Assign(pop.FullResult);
  finally   
  end;
 
 
  if (not pop.Login) then 
    begin   
      memo1.Lines.Add('POP login failed.');   
      exit
    end;
 


Was mich ärgert das ich hier grade null zeit für das reinarbeiten habe :(
und irgendwie ist das alles ein Buch mit Sieben Siegeln

Die Beispiele die ich zu den Thema finde machen das genau so

nur bei mir will das alles nicht laufen

was vielleicht toll wäre wenn sich jemand mal das angehängte Programm ansehen könnte und da mal schauen kann ob es bei ihn Arbeitet oder nicht
TT73GP7
 
Beiträge: 228
Registriert: 29. Mär 2016, 19:45

Beitragvon braunbär » 27. Jul 2017, 09:29 Re: POP3 mit Synapse

theo hat dir doch schon gesagt, warum das nicht funktioniert.

Du machst im try - except ein erstes pop.login. Jetzt bist du eingeloggt.
Und dann rufst du pop.login noch einmal auf: if not pop.login
Das kann nicht gehen.
braunbär
 
Beiträge: 286
Registriert: 8. Jun 2017, 17:21

Beitragvon TT73GP7 » 2. Aug 2017, 12:11 Re: POP3 mit Synapse

das ist ein super guter Einwand

wie prüfe ich denn dann ob ich schon eingeloggt bin?
TT73GP7
 
Beiträge: 228
Registriert: 29. Mär 2016, 19:45

Beitragvon compmgmt » 2. Aug 2017, 12:35 Re: POP3 mit Synapse

TT73GP7 hat geschrieben:das ist ein super guter Einwand

wie prüfe ich denn dann ob ich schon eingeloggt bin?
TPOP3Send.Login hat als Rückgabetyp ein Boolean. Wenn du erfolgreich eingeloggt wurdest, wird True übergeben, ansonsten False. Also ungefähr so:
Code: Alles auswählen
if pop.login then ... // erfolgreich eingeloggt
  else ... // einloggen fehlgeschlagen
Code: Alles auswählen
InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)
compmgmt
 
Beiträge: 351
Registriert: 25. Nov 2015, 17:06
Wohnort: in der Nähe von Stuttgart
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4 | 
CPU-Target: i386 + x86_64
Nach oben

Beitragvon TT73GP7 » 3. Aug 2017, 07:59 Re: POP3 mit Synapse

sooo

Login etc funktioniert.
in nachhinein war ich da auch echt blind, naja alles Lerneffekte halt :D

Nun habe ich noch ein Problem

Code: Alles auswählen
 
 
  pop.Stat;   
  sc := pop.statcount;     
 
for k := 1 to sc do  begin   
  pop.Retr(k);       
  msg.Lines.Assign(pop.FullResult); // Hier kommt die Fehlermeldung: External SIGSEGV   
  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(' ');
end;
 
 


wenn ich z.B. sowas hier mache

Code: Alles auswählen
 
 
  pop.Stat;   
  sc := pop.statcount;     
 
for k := 1 to sc do  begin   
  memo1.Lines.Add('Test ');
end;
 
 


Durchläuft er die schleife n mal-
Die Frage ist muss ich irgendwo noch sagen msg.create? oder sowas in der
Art?
msg ist von Typ Tmimemess
TT73GP7
 
Beiträge: 228
Registriert: 29. Mär 2016, 19:45

Beitragvon TT73GP7 » 3. Aug 2017, 10:08 Re: POP3 mit Synapse

ahhhhaaaaa

also ohne ein
msg := TMimeMess.create;

geht natürlich garnix :)
nun kann ich schonmal emails abholen ;)

die Eigentliche Massage bekomme ich nun so:
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]));
 


Aber wie bekomme ich den Text der Email raus und wie kann ich die Anhänge extrahieren?
TT73GP7
 
Beiträge: 228
Registriert: 29. Mär 2016, 19:45

» Weitere Beiträge siehe nächste Seite »
VorherigeNächste

Zurück zu Netzwerk



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

cron
porpoises-institution
accuracy-worried