AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TIDIMAP4: Identifizieren, ob Anhang vorhanden ohne ganze Nachricht runterzuladen
Thema durchsuchen
Ansicht
Themen-Optionen

TIDIMAP4: Identifizieren, ob Anhang vorhanden ohne ganze Nachricht runterzuladen

Ein Thema von AuronTLG · begonnen am 11. Jul 2024 · letzter Beitrag vom 12. Jul 2024
Antwort Antwort
AuronTLG

Registriert seit: 2. Mai 2018
Ort: Marburg
291 Beiträge
 
Delphi 12 Athens
 
#1

TIDIMAP4: Identifizieren, ob Anhang vorhanden ohne ganze Nachricht runterzuladen

  Alt 11. Jul 2024, 15:57
Moin,

ich hätte mal ein kleines Problem, zu dem ich aber gerade keine Lösung finde, lustigerweise eher wegen zu vielen Informationen, bei denen das, was ich suche, aber nicht dabei ist:

Ich rufe per TIDIMAP4.UIDRetrieveAllEnvelopes eine Nachrichtenliste ab. Diese Methode hat den großen Vorteil, dass sie blitzschnell ist und die dadurch abgerufenen TIDMessages alle wichtigen Informationen wie Betreff, Absender und Zeitpunkt beinhalten.
Problem ist, dass sie aber, wenn ich nichts übersehen habe, keinerlei Informationen diesbezüglich enthalten, ob es Anhänge gibt, da bei den Envelopes logischerweise keine MessageParts vorhanden sind, anhand denen man das z.B. feststellen könnte.

Was ich erreichen will ist, bei meiner Nachrichtenliste zu wissen, welche Nachrichten Anhänge haben, ohne dafür die langsameren Abrufmethoden des TIDIMAP4 wie UIDRetrieve verwenden zu müssen, denn ich will die Nachrichten in dem Moment ja noch gar nicht runterladen, sondern nur einen Überblick haben und dann ggf nur spezifische Nachrichten komplett abrufen.

Weiß wer, wie das zu erreichen ist? Bei meiner Recherche finde ich leider nur 129034903 Erklärungen dafür, wie man Anhänge verschickt, was ich aber schon weiß...
  Mit Zitat antworten Zitat
shebang

Registriert seit: 7. Feb 2020
131 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TIDIMAP4: Identifizieren, ob Anhang vorhanden ohne ganze Nachricht runterzuladen

  Alt 11. Jul 2024, 23:45
Vielleicht hilft dir das hier ja weiter: Parsing IMAP Email BODYSTRUCTURE for Attachment Names
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

AW: TIDIMAP4: Identifizieren, ob Anhang vorhanden ohne ganze Nachricht runterzuladen

  Alt 12. Jul 2024, 00:34
Nein. Dafür muß ja der Body runtergeladen werden, was er ja eigentlich nicht will.

Wenn es nicht im Header steht, dann muß nunmal der Rest (Body) runtergeladen werden.
Aber, wenn du beim Downloaden bereits den Inhalt dir ansehen kannst, dann könntest du mindestens den Rest des Downloads dann abbrechen, wenn die nötige Info bereits vorhanden ist, oder

Nja, normale Mailprogramme speichern sich dann das Runtergeladene (Cache), um es nicht mehrmals runterladen zu müssen.
$2B or not $2B

Geändert von himitsu (12. Jul 2024 um 00:37 Uhr)
  Mit Zitat antworten Zitat
AuronTLG

Registriert seit: 2. Mai 2018
Ort: Marburg
291 Beiträge
 
Delphi 12 Athens
 
#4

AW: TIDIMAP4: Identifizieren, ob Anhang vorhanden ohne ganze Nachricht runterzuladen

  Alt 12. Jul 2024, 09:16
Nein. Dafür muß ja der Body runtergeladen werden, was er ja eigentlich nicht will.

Wenn es nicht im Header steht, dann muß nunmal der Rest (Body) runtergeladen werden.
Aber, wenn du beim Downloaden bereits den Inhalt dir ansehen kannst, dann könntest du mindestens den Rest des Downloads dann abbrechen, wenn die nötige Info bereits vorhanden ist, oder

Nja, normale Mailprogramme speichern sich dann das Runtergeladene (Cache), um es nicht mehrmals runterladen zu müssen.

Joa, hatte ich schon befürchtet, aber die Hoffnung stirbt ja zuletzt. Die Structures runterladen ist zwar schneller als alles runterladen, aber in keinster Weise vergleichbar mit den Envelopes, bei denen man locker innerhalb von 0,2 Sekunden den Inhalt eines ganzen IMAP-Accounts zur Verfügung hat.
Heißt für mich, dass ich das wohl im Hintergrund machen muss, womit ich mich mit den verhassten Threads herumschlagen muss...
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.116 Beiträge
 
Delphi 12 Athens
 
#5

AW: TIDIMAP4: Identifizieren, ob Anhang vorhanden ohne ganze Nachricht runterzuladen

  Alt 12. Jul 2024, 09:44
Vielleicht macht es Sinn die Header mit TIDIMAP4.UIDRetrieveAllEnvelopes vorab zu laden und dann über die HeaderInfo einen Hash zu bilden und in einer DB abzuspeichern.
Dann kann man in Ruhe in einem Hintergrundthread die Zusatzdaten laden und notfalls nach Analyse sofort verwerfen, und dem Hash die entsprechenden Flags zuweisen.
Damit wäre ein komplettes Downloaden und Speichern nicht nötig, nur eventuell temporär, und ein erneutes Downloaden nur OnDemand oder nach bestimmten Regeln (nur bei Anhang), was durch die Zuordnung zum Hash eindeutig geschützt wird.
  Mit Zitat antworten Zitat
AuronTLG

Registriert seit: 2. Mai 2018
Ort: Marburg
291 Beiträge
 
Delphi 12 Athens
 
#6

AW: TIDIMAP4: Identifizieren, ob Anhang vorhanden ohne ganze Nachricht runterzuladen

  Alt 12. Jul 2024, 10:06
So ähnlich war schon mein bisheriges Vorgehen: Mit TIDIMAP4.UIDRetrieveAllEnvelopes die Emailliste des Postfaches abrufen und bei Aufruf einer einzelnen Mail diese abrufen und deren Daten lokal abspeichern, so dass beim nächsten Aufruf alle Informationen aus der Datenbank bzw lokalem Speicher kommen.
Die Information zu den Anhängen war das einzige, was mir bei der EmailListe noch gefehlt hat.

Bei den Strukturen werde ich das auch noch so gestalten, dass er explizit nur die EMails auf dem Server rausfiltert, bei denen die Informationen noch fehlen oder bei denen etwas geändert wurde, womit sich der Aufwand dann in Grenzen halten sollte, sobald für die bestehenden Emails die Informationen schon abgerufen wurden.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

AW: TIDIMAP4: Identifizieren, ob Anhang vorhanden ohne ganze Nachricht runterzuladen

  Alt 12. Jul 2024, 10:43
Wenn es um "eigene" Mails geht und man z.B. auch im Serverzentrum noch einen Server hat, oder auch mit PHP und Co. ginge es.

Also ganz nah am Mailserver (sehr schnelle Verbindung), könnte man dort sich die Mails laden und sich selbst die gewünschte Info in den Header schreiben ... dann hätte dein lokales Programm diese Info somit auch schon im schnellen Header zur Verfügung.
Bzw., bei einem eigenen Mailserver, könnte man sowas sich bestimmt auch als Plugin direkt hinzufügen.
$2B or not $2B

Geändert von himitsu (12. Jul 2024 um 11:53 Uhr)
  Mit Zitat antworten Zitat
AuronTLG

Registriert seit: 2. Mai 2018
Ort: Marburg
291 Beiträge
 
Delphi 12 Athens
 
#8

AW: TIDIMAP4: Identifizieren, ob Anhang vorhanden ohne ganze Nachricht runterzuladen

  Alt 12. Jul 2024, 11:18
Hm, ich habe hier jetzt nur noch ein Problem mit:

Ich filtere per UIDSearchMailBox die Mails raus, die ich brauche und hole sie mir per UIDRetrieveStructure.
Soweit so gut.
Das Problem ist aber, dass die MessageParts der durch UIDRetrieveStructure abgerufenen TIDMessages allesamt grundsätzlich den "APart.PartType = mptAttachment" haben bzw die Bedingung "AMessage.MessageParts[I] is TIDAttachment" erfüllen.
Das heißt, absolut alles, selbst die plaintext, html und eingebetteten Bestandteile werden als Attachments erkannt, was absoluter Schwachsinn ist.
Bei Abruf per UIDRetrieve sind die MessageParts logischerweise korrekt, aber ich will ja eben nur wissen, was es für Anhänge gibt und sie NICHT direkt runterladen.

Nachtrag: Ich habe mal gegengetestet, was es ausmacht, UIDRetrieve anstatt UIDRetrieveStructure zu verwenden, und bei mir zumindest gibt es da zeitlich so gut wie keinen Unterschied, zumindest solange ich nicht direkt anfange, Anhänge direkt zu speichern etc.

Geändert von AuronTLG (12. Jul 2024 um 11:23 Uhr)
  Mit Zitat antworten Zitat
AuronTLG

Registriert seit: 2. Mai 2018
Ort: Marburg
291 Beiträge
 
Delphi 12 Athens
 
#9

AW: TIDIMAP4: Identifizieren, ob Anhang vorhanden ohne ganze Nachricht runterzuladen

  Alt 12. Jul 2024, 11:42
Okay, anscheinend muss man die Variante von UIDRetrieveStructure verwenden, welche einen TIDImapMessageParts-Parameter verwendet und nicht den TIDMessage-Parameter.
Tut man dies, enthalten die TIDImapMessageParts tatsächlich alle Informationen, die man braucht.

Keine Ahnung, warum das so unnötig verworren sein muss, aber nun gut...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:44 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