![]() |
Delphi-Version: 10 Berlin
TIdMessage (Indy) Flags setzen
Tag auch,
ist es irgendwie möglich sowas hier zu veranstalten?
Delphi-Quellcode:
Also Maildatei (eml) von der Platte lesen und auf erledigt setzen, damit sie vom Programm als "schon bearbeitet" erkannt werden kann beim nächsten Durchlauf.
MailReader := TIdMessage.Create;
MailReader.LoadFromFile(Filename); ... mach was mit der Mail ... MailReader.Flags := {MailReader.Flags + }[mfSeen]; MailReader.SaveToFile(Filename); Der Ablauf oben läuft ohne Fehler und die Mail wird auch neu gespeichert, die Flags allerdings nicht. Warum? |
AW: TIdMessage (Indy) Flags setzen
SaveToFile speichert nur die Mailheader und (optional) den Mailbody ab. Flags sind nicht darin enthalten.
Eine Lösung wäre, die SaveToFile Methode durch eine andere zu ersetzen, die auch weitere Informationen speichert. Dann muss LoadFromFile natürlich auch passend gemacht werden. |
AW: TIdMessage (Indy) Flags setzen
Wie funktioniert das denn regulär das eine Mail als gelesen markiert wird? Ist das was Serverseitiges? (Kein Plan von dem Thema)
Dieses SaveToFile umschreiben scheint mir ein enormer Aufwand zu sein :) |
AW: TIdMessage (Indy) Flags setzen
Zitat:
|
AW: TIdMessage (Indy) Flags setzen
Soweit ich weiß, wird in der Regel die Verwaltung der Flags für gelesen ... vom Client übernommen.
Wenn Du z. B. von verschiedenen Rechnern mit unterschiedlichen Clients auf das gleiche Postfach zugreifst, wirst Du feststellen, dass die Anzeige der Gelesenmarkierung von Client zu Client abweicht. Auch eine per Webinterface gelesene und entsprechend markierte Mail enthält im Client nicht die Gelesenmarkierung. Dito. umgekehrt. Etwas überspitzt formuliert: Man muss je Client alles lesen, egal wie oft man es woanders schon gelesen hat. Bei IMAP mag das anders sein, wenn es von allen Clients unterstützt wird. |
AW: TIdMessage (Indy) Flags setzen
Ok dann anders gefragt. :)
Wie kann ich mit Delphi diese Flags setzen? |
AW: TIdMessage (Indy) Flags setzen
Vermutlich eher garnicht, weil das (außer bei IMAP?) jeder Client für sich selbst erledigt.
Soweit ich weiß: Fünf Clients mit Outlook und ein Postfach = fünf eigenständige Verwaltungen der Flags. Dazu noch ein WebClient, FoxMail, Thunderbird und was weiß ich alles. Jeder verwaltet selbst. Bei der Suchmaschine meiner Wahl habe ich mal diese Suchwörter eingegeben: "delphi source tidmessages flag". Dabei kam dann u. a. das heraus: ![]() ![]() Wenn Du nun einen vollständig eigenständigen Mailclient schreiben möchtest, so musst Du Dir leider eine eigene Verwaltung der Flags implementieren. Ein Austausch der Flags zwischen mehreren Clients, bzw. deren Zwischenspeicherung auf dem Server, scheint nicht möglich zu sein. Bzw.: Wenn Du die Flags in die Datei schreibst, heißt das nicht, dass Clients von anderen Herstellern dies auswerten. Momentan hab' ich jedenfalls keine auch nur halbwegs brauchbare Idee. Beschreib' ggfls. mal etwas genauer, was Du vorhast, eventuell hat ja dann jemand 'nen Lösungsansatz. Ok: Du möchtest die Datei lesen, verändern und wieder schreiben, aber wer soll danach dann was mit der veränderten Mail machen? |
AW: TIdMessage (Indy) Flags setzen
Ein bischen hat ich das schon vermutet, von wegen POP3 verwaltet die FLAGS nicht. (kA von der Materie)
Nach kurzem Überflug über die IMAP Technik, fällt die Flagsetzerei scheinbar aus, Weil das Verwalten der Flags scheinbar nur auf dem Mailserver passiert und auch das als einzig Sinnvolle erscheint. :) Mit nem Mailclient soll das nichts zu tun haben. Folgender Ablauf wars dann auch schon. Geplant war:
MailSubject im Header kann man ja speichern und das Ganze so kenntlich machen, find ich irgendwie nich so doll, aber zur Not wirds dann wohl gehen :stupid: |
AW: TIdMessage (Indy) Flags setzen
Werden die erledigten dann nachher noch benötigt?
Ansonsten: Erledigte einfach umbenennen, z. B. die Dateiendung in .erledigt ändern? Dann gibt es bei der TIDMessage noch die ExtraHeaders. Das ist letztlich eine TStringList. Dort kannst Du eigene Einträge machen, wichtig ist nur, dass sie nicht mit irgendwas bereits verwendetem kollidieren. Sinngemäß müsstest Du dann über
Delphi-Quellcode:
einen Erledigungsvermerk setzen können und über
IdMessage.ExtraHeaders.SetValue('X-Towmuz-HasDone',DateTimeToStr(Now));
Delphi-Quellcode:
überprüfen können.
IrgendeineVariabel := IdMessage.ExtraHeaders.GetValue('X-Towmuz-HasDone');
Das geht so nicht, die Methoden sind nicht veröffentlicht. Müsste aber über Values funktionieren. |
AW: TIdMessage (Indy) Flags setzen
Ui ExtraHeaders, das hab ich noch nicht gesehen, danke :) das wird den Zweck erfüllen.
Datei umbenennen/verschieben ist leider nicht möglich (was aber das Einfachste wäre) Edit: So hauts hin mit den ExtraHeadern Schreiben:
Delphi-Quellcode:
Auslesen:
IdMessage.ExtraHeaders.AddValue('x-irgendwas', 'Ausgelesen');
IdMessage.SaveToFile(_Filename);
Delphi-Quellcode:
stringDing := IdMessage.Headers.Values['x-irgendwas']; //Über Headers abfragen nicht über ExtraHeaders
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz