Oznaczenie przeczytanej wiadomości (Indy 9)

0

Tworzę system do replikacji danych (wiele końcówek - jedna centrala).

Okazało się w ramach rozwoju systemu, że dobrym rozwiązaniem byłoby rownoległe zapisywanie/odczytywanie wiadomości email (pliki XML z danymi lecą pocztą) na kilku centralach (coś na zasadzie asymetrycznej replikacji - operacje przetwarzania danych wykonywane są niezależnie w kilku punktach, ale ostatecznei zawierają te same dane - przy założeniu, że wszystkie punkty odczytały te same wiadomości).

Teraz - oczywiście mogę nie kasować wiadomości z serwera i pozostałe punkty będą ją odczytywały, ale przy każdym obrocie usługi (program cyklicznie wykonuje zestaw operacji) odczytywane są ponownie wiadomości, które przy poprzednich obrotach były już przetwarzane.

Najfajniejszym rozwiązaniem byłoby wprowadzenie znacznika wiadomości, który po odczytaniu przez punkt/centrale zapisywany byłby do odpowiedniej tabeli importów.

Pytanie: Jak zrealizować obsługę unikalnych znaczników (oczywiście nie pytam jak wygenerować taki znacznik i jak go zapisać/odczytac do i z bazy). Chodzi o to jak wygenerowany znacznik zapisać do wiadomości (gdzie, jak, czym) i jak po odczytaniu wiadomościgo odczytać i wpiąć się z obsługą.

Oczywiście - najprostrzym rozwiązaniem byłoby zapisywanie znacznika do tytułu wiadomości, ale może jest jakiś ... akuratniejszy ... sposób.

Mam nadzieję, że dostatecznie jasno tłumacze o co mi chodzi.

0

Okej ... Message-id załatwiłoby sprawę - ale jak to obsłużyć za pomocą Indy

EDIT: Ok. Wystarczyło chwilę pokopać w manualu - propert MsgId komponentu TidMessage załatwia ten temat.

Dzięki misiek za nakierowanie na temat.

0

Misiek, przepraszam, że zawracam ci głowę - ale nie bardzo umiem sobie poradzić z tym MsgId

to znaczy - po stronie końcówki uzupełniam propert idMessage.MsgId:='[email protected]'; ale wiadomość nie zawiera tego znacznika Message-ID i oczywiście po drugiej stronie idPOP3.MsgId jest puste.

Niestety - w googlach nie potrafie znaleŹć przykładu.

Co robię źle ?

0
toyman napisał(a)

uzupełniam propert idMessage.MsgId:='[email protected]'; ale wiadomość nie zawiera tego znacznika Message-ID

a Message-ID nie jest przypadkiem nadawane automatycznie przez serwer?
przeciez musi byc niepowtarzalne, nie mozesz mu przypisac jakiejs wartosci...

0

nie wiem - mam do indy wstręt i go nie używam
@cimak nie do końca - cytat z http://www.rahul.net/falk/mailtrack.html

Message-ID:
A unique string assigned by the mail system when the message is first created. This is also forgeable in most cases, but requires a little more specialized knowledge than forging the From: line. Also, the Message-ID: often identifies the system from which the sender is logged in, rather than the actual system where the message originated.

The format of a Message-ID: field is <unique string="string">@<sitename>

Each kind of mail software has its own style of unique string. Sloppy forgeries often get it wrong, thus a forgery can be confirmed by comparing the message id with some legitimate messages from that same site.

Z innej strony serwer pocztowy jeśli dostanie dwie wiadomości z takim samym msgId to po prostu uznaje drugą za kopie i ją ignoruje

0
cimak napisał(a)
toyman napisał(a)

uzupełniam propert idMessage.MsgId:='[email protected]'; ale wiadomość nie zawiera tego znacznika Message-ID

a Message-ID nie jest przypadkiem nadawane automatycznie przez serwer?
przeciez musi byc niepowtarzalne, nie mozesz mu przypisac jakiejs wartosci...

Gdyby tak było - w treści wiadomości pojawiłby się znacznik Message-ID, a go nie ma.

Poza tym - gdybym nie mógł nadawać tego identyfikatora - nie byłoby properta.

No i na koniec - przeciez nie jest problemem nadanie pierwszej wiadomosci identyfikatora 1, drugiej 2, trzeciej 3, itd - one mają być unikalne dla mnie, a nie w ramach całego świata jak GUID, a dla mnie takie rozróżnienie w zupełności wystarczy.

0
cimak napisał(a)
toyman napisał(a)

uzupełniam propert idMessage.MsgId:='[email protected]'; ale wiadomość nie zawiera tego znacznika Message-ID

a Message-ID nie jest przypadkiem nadawane automatycznie przez serwer?
przeciez musi byc niepowtarzalne, nie mozesz mu przypisac jakiejs wartosci...

Sprawa się wyjaśniła. Miałeś całkowitą rację - przepraszam za podważanie.

Okazuje się, że rzeczywiście serwer pocztowy sam dopina znacznik Message-ID. To że się on nie pojawiał wynikało z tego, że mam ustawione przesyłanie wiadomości między kontami na serwerach home.pl

Kiedy wiadomość wychodziła z konta zlokalizowanego na serwerach interia.pl - znacznik Message-ID był dodawany automatycznie.

Niestety - kłopot w tym, że w przypadku skrzynek zlokalizowanych na home.pl (a niestety muszę z nich korzystać, bo klient ma tam wykupioną powierzchnie) nie ma znaczenia czy ustawie property MsgId i UID czy nie - one są ignorowane.


Okej - skoro tak to ciekawa rzecz.

Windows Mail nadal doskonale wie która wiadomośc była już pobierana, a która nie. Po czym jeszcze można rozpoznać wiadomość ?

0

Okej - ostatecznie poradziłem sobie w ten sposób, że skorzystałem z propertu: TidMessage.ExtraHeaders i tam żywcem wrzuciłem znacznik Message-ID

1 użytkowników online, w tym zalogowanych: 0, gości: 1