AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TIdMessage (Indy) Flags setzen

Ein Thema von Towmuz · begonnen am 24. Okt 2017 · letzter Beitrag vom 25. Okt 2017
Antwort Antwort
Towmuz

Registriert seit: 21. Sep 2016
Ort: Minden
127 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

TIdMessage (Indy) Flags setzen

  Alt 24. Okt 2017, 12:18
Delphi-Version: 10 Berlin
Tag auch,

ist es irgendwie möglich sowas hier zu veranstalten?

Delphi-Quellcode:
    MailReader := TIdMessage.Create;
    MailReader.LoadFromFile(Filename);
    ... mach was mit der Mail ...
    MailReader.Flags := {MailReader.Flags + }[mfSeen];
    MailReader.SaveToFile(Filename);
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.

Der Ablauf oben läuft ohne Fehler und die Mail wird auch neu gespeichert, die Flags allerdings nicht. Warum?
Thomas
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.004 Beiträge
 
Delphi 2009 Professional
 
#2

AW: TIdMessage (Indy) Flags setzen

  Alt 24. Okt 2017, 13:20
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.
Michael Justin
  Mit Zitat antworten Zitat
Towmuz

Registriert seit: 21. Sep 2016
Ort: Minden
127 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

AW: TIdMessage (Indy) Flags setzen

  Alt 24. Okt 2017, 14:20
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
Thomas
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.004 Beiträge
 
Delphi 2009 Professional
 
#4

AW: TIdMessage (Indy) Flags setzen

  Alt 24. Okt 2017, 14:32
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
Im Internet fand ich den Hinweis, dass dieses Flag von IMAP verwendet wird. In diesem Fall ist es serverseitig, d.h. der Client erfährt nach dem Abrufen der Nachricht, welche Flags diese bereits hat. Flags kann aber auch beliebig clientseitig verwendet / gesetzt werden. Daher heisst es auch ganz allgmein "Flags" (und nicht z.B. IMAPFlags).
Michael Justin
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

AW: TIdMessage (Indy) Flags setzen

  Alt 24. Okt 2017, 14:48
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.
  Mit Zitat antworten Zitat
Towmuz

Registriert seit: 21. Sep 2016
Ort: Minden
127 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

AW: TIdMessage (Indy) Flags setzen

  Alt 25. Okt 2017, 07:05
Ok dann anders gefragt.
Wie kann ich mit Delphi diese Flags setzen?
Thomas
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#7

AW: TIdMessage (Indy) Flags setzen

  Alt 25. Okt 2017, 09:47
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:

https://stackoverflow.com/questions/...ages-with-indy
http://www.e-iter.net/Knowledge/Indy9/007544.html

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?
  Mit Zitat antworten Zitat
Towmuz

Registriert seit: 21. Sep 2016
Ort: Minden
127 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

AW: TIdMessage (Indy) Flags setzen

  Alt 25. Okt 2017, 11:07
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:
  • Verzeichnis (Postfach mit *.eml) auslesen
  • Anhänge verarbeiten und Mail auf erledigt setzen
  • Nach 5 Min. wieder auf Anfang und nur Anhänge von nicht Erledigten bearbeiten
So müsste ich nicht noch irgendwas aus UID und MsgUID basteln um zu wissen welche Mail schon dran 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
Thomas
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#9

AW: TIdMessage (Indy) Flags setzen

  Alt 25. Okt 2017, 12:19
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 IdMessage.ExtraHeaders.SetValue('X-Towmuz-HasDone',DateTimeToStr(Now)); einen Erledigungsvermerk setzen können und über IrgendeineVariabel := IdMessage.ExtraHeaders.GetValue('X-Towmuz-HasDone'); überprüfen können.
Das geht so nicht, die Methoden sind nicht veröffentlicht.

Müsste aber über Values funktionieren.

Geändert von nahpets (25. Okt 2017 um 12:38 Uhr) Grund: Text korrigiert.
  Mit Zitat antworten Zitat
Towmuz

Registriert seit: 21. Sep 2016
Ort: Minden
127 Beiträge
 
Delphi 10.1 Berlin Professional
 
#10

AW: TIdMessage (Indy) Flags setzen

  Alt 25. Okt 2017, 12:32
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:
    IdMessage.ExtraHeaders.AddValue('x-irgendwas', 'Ausgelesen');
    IdMessage.SaveToFile(_Filename);
Auslesen:
    stringDing := IdMessage.Headers.Values['x-irgendwas']; //Über Headers abfragen nicht über ExtraHeaders
Thomas

Geändert von Towmuz (26. Okt 2017 um 11:25 Uhr)
  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 21:01 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