Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Schnelle Einführung in Indy (https://www.delphipraxis.net/200927-schnelle-einfuehrung-indy.html)

FediDelPr 7. Jun 2019 16:48

Schnelle Einführung in Indy
 
Hallo zusammen,

ich habe eine erste (sogar funktionierende) Anwendung mit Indy geschrieben.
Dies gelang mit Hilfe von Delphi-Praxis und Stackoverflow.

Das Indy-Manual ist über 3000 Seiten lang.
Habe keine Lust mich da durch die Details zu lesen.

Ich suche eine einfache Einstiegsmöglichkeit.
Wo finde ich einen gut strukturierten Überbau ?

Kann da jemand helfen ?
Vielen Dank

Woran ich zurzeit gerade bin:
Damit ich nicht tausende emails die beim e-mail Provider liegen zuerst runterholen
muss möchte ich

1. Selektionen auf dem e-mail Server vornehmen
2. Auch Suchfunktionen nach Möglichkeit dem e-mail Server überlassen

und dann nur noch diejenigen e-mails runterladen die mich interessieren.
Bis anhin scanne ich immer alle Files, das dauert enorm lange.

Gruss

peterbelow 7. Jun 2019 17:26

AW: Schnelle Einführung in Indy
 
Zitat:

Zitat von FediDelPr (Beitrag 1434160)
Hallo zusammen,

ich habe eine erste (sogar funktionierende) Anwendung mit Indy geschrieben.
Dies gelang mit Hilfe von Delphi-Praxis und Stackoverflow.

Das Indy-Manual ist über 3000 Seiten lang.
Habe keine Lust mich da durch die Details zu lesen.

Ich suche eine einfache Einstiegsmöglichkeit.
Wo finde ich einen gut strukturierten Überbau ?

Kann da jemand helfen ?
Vielen Dank

Woran ich zurzeit gerade bin:
Damit ich nicht tausende emails die beim e-mail Provider liegen zuerst runterholen
muss möchte ich

1. Selektionen auf dem e-mail Server vornehmen
2. Auch Suchfunktionen nach Möglichkeit dem e-mail Server überlassen

und dann nur noch diejenigen e-mails runterladen die mich interessieren.
Bis anhin scanne ich immer alle Files, das dauert enorm lange.

Gruss

Google mal

indy tutorial delphi

Das gibt eine Reihe von Hits, die ganz gut aussehen. Auf dem alten Indy-Site findet sich auch eine Sammlung von Links auf diverse Artikel über Indy, vielleicht ist auch da was nützliches dabei. http://ww2.indyproject.org/Sockets/D...ticles.EN.aspx

mjustin 7. Jun 2019 19:13

AW: Schnelle Einführung in Indy
 
Zitat:

Zitat von FediDelPr (Beitrag 1434160)

1. Selektionen auf dem e-mail Server vornehmen
2. Auch Suchfunktionen nach Möglichkeit dem e-mail Server überlassen

und dann nur noch diejenigen e-mails runterladen die mich interessieren.
Bis anhin scanne ich immer alle Files, das dauert enorm lange.

Das ist nicht "serverunabhängig" lösbar, denn dazu muss der Server die Filterung/Selektion/Suche auch unterstützen. Das Protokoll, über das der Client mit dem Server reden kann, muss bekannt sein - zum Beispiel MAPI oder HTTP (Exchange Web Services API). Indy ist für Low-Level Netzwerkkommunikation und einige Protokoll gedacht, aber welches dann wie eingesetzt wird, ist die spannendere Frage.

FediDelPr 11. Jul 2019 01:25

AW: Schnelle Einführung in Indy
 
Ich verwende IMAP (TIdIMAP4).

Wie gesagt, ich möchte

1. Selektionen auf dem e-mail Server vornehmen
2. Auch Suchfunktionen nach Möglichkeit dem e-mail Server überlassen
(vorerst im Header: also Titel, Absender, Empfänger.., später dann auch mal Inhalt
oder angehängte Files)

Aber beginnen wir mal einfach.

Danke für Lösungsansätze und geeignete Funktionen von Indy.

hoika 11. Jul 2019 06:32

AW: Schnelle Einführung in Indy
 
Hallo,
Zitat:

Bis anhin scanne ich immer alle Files
Es gibt die Option, nur die E-Mail-Header runterzuladen.
Dann entfällt natürlich die Option, in der E-Mail (Body, Attachments) zu suchen.

Nach dem Connect steht in den Options drin, ob der jeweilige Server das unterstützt.
Das sollten aber mittlerweile alle tun.

FediDelPr 11. Jul 2019 21:37

AW: Schnelle Einführung in Indy
 
@hoika

Das wende ich bereits jetzt an.
Allerdings dauert das bei 30000 bis 40000 E-mails leider viel zu lange.
Pro Sekunde werden etwas 15 e-mail headers bereitgestellt.

Die Selektion auf dem e-mail Server ist grundsätzlich viel schneller.
Ich bin also sehr daran interessiert wie das (mit Indy) möglich ist.

Gruss

hoika 12. Jul 2019 04:42

AW: Schnelle Einführung in Indy
 
Hallo,
dann steig um auf IMAP.

Dort kannst Du mit Flags wie "gelesen" arbeiten.
Dann dauert es einmal lange (zum Setzen der alten Nachrichten auf "gelesen") und dann ist es schnell (er)


https://forums.embarcadero.com/threa...hreadID=106117

Zitat:

Ich bin also sehr daran interessiert wie das (mit Indy) möglich ist.
Die Indys haben ja die entsprechenden RFCs umgesetzt,
such doch mal dort, was mit POP3 noch alles geht.

Schokohase 12. Jul 2019 06:48

AW: Schnelle Einführung in Indy
 
Zitat:

Zitat von FediDelPr (Beitrag 1436469)
Ich verwende IMAP (TIdIMAP4).

Zitat:

Zitat von hoika (Beitrag 1436540)
Hallo,
dann steig um auf IMAP.

Welchen Vorteil hat es denn von IMAP auf IMAP umzusteigen?

hoika 12. Jul 2019 08:45

AW: Schnelle Einführung in Indy
 
Hallo,
schau dir den Link an bzw. das RFC.
Mit IMAP kann man auf dem Server suchen.

Schokohase 12. Jul 2019 08:55

AW: Schnelle Einführung in Indy
 
Zitat:

Zitat von hoika (Beitrag 1436549)
Hallo,
schau dir den Link an bzw. das RFC.
Mit IMAP kann man auf dem Server suchen.

Der TE verwendet IMAP bereits und du empfiehlst ihm, dass er doch lieber auf IMAP umsteigen soll?

"Ich fahre mit der Bahn." - "Steig doch auf die Bahn um!"
"Ich ernähre mich vegan." - "Steig doch auf vegane Ernährung um!"
"Ich programmiere mit Delphi." - "Steig doch um auf Delphi!"

hoika 12. Jul 2019 09:03

AW: Schnelle Einführung in Indy
 
Hallo,
den Thread habe ich wohl übersehen ;)

Also drehen wir es um.

Probier POP3 mit FetchHeaders.
Dann wird nicht die komplette E-Mail heruntergeladen.

Ich weiss nicht, ob das beim IMAP auch geht.

FediDelPr 29. Okt 2019 21:35

AW: Schnelle Einführung in Indy
 
Ich habe den Eindruck, dass Indy nicht so viel verwendet wird.
Gibt es gute Alternativen dazu ?
Wie gesagt möchte ich zurzeit in erster Linie IMAP (Version 4) verwenden.

TurboMagic 30. Okt 2019 06:34

AW: Schnelle Einführung in Indy
 
Eine open source Alternative zu Indy ist ICS (www.overbyte.eu).
Diese arbeitet meist komplett asynchron, blockiert also dein
Programm nicht sondern nutzt Events.

Ob die auch IMAP oder nur POP3 kann weiß ich gerade jedoch nicht
und die Dokumentation ist leider sehr unvollständig, dafür sind
da jede Menge Beispielprogramme mit dabei.

Funktioniert für Windows und ich glaube auch MacOS X, aber nicht
für die mobilen Plattformen. Du klangst aber auch nicht so, als
ob du die bräuchtest.

ICS gibt's in 2 Varianten (VCL only und VCL/FMX) auch in GetIt.
Im englisch sprachigen Delphi-Praxis Forum gibt es seit ein paar
Monaten auch ein spezielles Support Forum für ICS, da die vorher
genutzte Mailingliste mehrfach Ärger bereitet hatte.

Grüße
TurboMagic

FediDelPr 2. Nov 2019 23:56

AW: Schnelle Einführung in Indy
 
Danke TurboMagic,

welche Erfahrungen hast du mit ICS gemacht bezüglich
Zuverlässigkeit, Funktionsumfang ..? Die unvollständige
Dokumentation hast du ja bereits erwähnt.
Kannst du vielleicht sogar einen Vergleich mit INDY ziehen ?

Vorderhand bleibe ich mal bei INDY, denn mittlerweile, nach
viel Zeitaufwand, laufen bei mir die wichtigsten Funktionen:

Ich kann e-mails auf dem e-mail Server selektieren (Suchfunktion)
und diese dann im EML-Format speichern oder auf einen andern
e-mail Account kopieren.

Die wichtigsten Indy-Prozeduren sind:

IMAPClientSrc.SelectMailBox('INBOX')
SetLength(SearchInfo, 1);
SearchInfo[0].SearchKey := skFrom;
SearchInfo[0].Text := searchText;
IMAPClientSrc.SearchMailBox(SearchInfo)

FOR i := 0 TO High(IMAPClientSrc.MailBox.SearchResult) DO
BEGIN
MsgObject := TIdMessage.Create(nil);
IMAPClientSrc.Retrieve(IMAPClientSrc.MailBox.Searc hResult[i],
MsgObject)
count := msgObject.FromList.Count;

IF count = 1 THEN
BEGIN
s := msgObject.FromList.Items[0].Address;
ShowMessage(s);
END;

(* Message (e-mail) auf anderen e-mail account kopieren *)
res := IMAPClientDst.AppendMsg( 'INBOX', msgObject, msgObject.Headers, [] );

MsgObject.Free;
END;

Für Source und Destination wird je eine eigene Instanz
von TIMAPClient verwendet.
Die Absenderadresse (FROM) des Original-emails wird angezeigt.
Das ist kein lauffertiger Code, nur die wesentlichen Methoden.

TurboMagic 3. Nov 2019 10:30

AW: Schnelle Einführung in Indy
 
Naja, mit ICS habe ich noch keinen E-Mail Empfang realisiert, bisher nur Versand via SMTP.
Daher kann ich dazu nicht viel sagen.

Wenn man bestimmte Prinzipien kapiert hat ist ICS recht leistungsfähig und die Mailingliste
war auch oft hilfreich. Ich vermute, dass das neue Forum auf der EN Delphipraxis ähnlich
hilfreich ist.

Durch die durchgängig event basierte Umsetzung braucht man in ICS selten einen Thread.

Grüße
TurboMagic

MichaMD 11. Apr 2021 12:41

AW: Schnelle Einführung in Indy
 
Zitat:

Zitat von FediDelPr (Beitrag 1434160)
Das Indy-Manual ist über 3000 Seiten lang.
Habe keine Lust mich da durch die Details zu lesen.

Ich schon!!! ^^
Allerdings finde ich das Manual nicht, da die meisten Links diesbezüglich tot sind.
Hat jemand einen funktionierenden Link?
Ich möchte gerne zum allerersten mal mit Komponenten überhaupt arbeiten umd mir eine Email funktionalität zu schreiben, aber die meisten Tutorials die ich gefunden habe gehen eher auf die Verwendung mit Vorwissen ein und nicht wirklich von 0 an.

mmw 11. Apr 2021 12:57

AW: Schnelle Einführung in Indy
 
http://mediaserver.fh-wedel.de/publi...downloads.html

jsheyer 11. Apr 2021 14:01

AW: Schnelle Einführung in Indy
 
Man kann im ersten Schritt nur den/die Header runterladen, das geht auch schnell, so mach ich das und dann speichere ich mir diesen Lokal und erst wenn man die Mail lesen möchte dann rufe ich diese mit UIDRetrieve der TIdImap Komponente ab.
Was mir aber noch nicht gelungen ist, und das finde ich auch spannend, wie man den Mail Text mit den Namen der Attachments bekommt ohne die Attachments selber downzuladen.
Ich weiß das man mit den MessageParts die einzelnen Parts laden kann.
Das wäre von der Performance sehr spannend, denn wenn sich mehrere MB an Attachments an der Mail befinden dauert das.
Selbst wenn was ich auch schon versucht habe mit der TidMessage diese als File Lokal zu speichern und wieder zu laden, dauert das laden locker 1-2 Sekunden von einer SSD.
Aber vielleicht habt ihr noch bessere Ideen (hoofe ich :-) )

mmw 11. Apr 2021 14:26

AW: Schnelle Einführung in Indy
 
hallo,

vielleicht so

Delphi-Quellcode:
 for j := 0 to Pred(mymessage.MessageParts.count) do

      if (mymessage.MessageParts.Items[j] is TIdAttachment) then
          ListBox1.Items.Add(TIdAttachment(mymessage.MessageParts.Items[j]).FileName);
Gruß

jsheyer 11. Apr 2021 14:33

AW: Schnelle Einführung in Indy
 
Ja das geht so klar, aber dann sind die Attachments doch schon bereits runtergeladen und genau das soll doch für eine hohe Performance vermieden werden.

MichaMD 11. Apr 2021 21:26

AW: Schnelle Einführung in Indy
 
Zitat:

Zitat von mmw (Beitrag 1486890)

Super. Herzlichen Dank!

himitsu 12. Apr 2021 12:56

AW: Schnelle Einführung in Indy
 
Es wird eben entweder nur der MailHeader (der erste Teil der Mail-Datei, bis zur ersten Leerzeile) oder die GANZE Mail runtergeladen ... und da sind dann auch alle Anhänge mit enthalten, als Teil/Part innerhalb der Mail-Datei.
> Header, siehe Mail-Header oder HTTP-Header, wobei hier der Server den Abbruch vornimmt, indem man ihm vorher mitteilt, dass man nicht mehr haben möchte

Nicht mit Indy, aber theoretisch könnte man den laufenden Download während der Übertragung abbrechen und so die letzten Bytes/Parts nicht runterladen (so als wenn man beim Laden einer Webseite oder beim Runterladen von FTP auf Stopp drückt), aber offiziell ist sowas natürlich nicht vorgesehn.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz