1

Temat: Jak odszukać wiadomości z inną datą utworzenia niż datą odebrania

Mam bazę kilku tysięcy wiadomości. Wiem, że w niektórych przypadkach data utworzenia (created) i odebrania (received) są różne. Wynikało to z błędnego ustawienia daty systemowej na moim komputerze lub/i błędnej konfiguracji serwera pocztowego. Chcę odnaleźć wszystkie wiadomości w których data utworzenia i odebrania są inne, żeby skorygować błędy. Czy da się to zrobić w inny sposób, niż ręczne przechodzenie przez wszystkie wiadomości?
Będę wdzięczny za odpowiedź, bez względu na to, jaka by ona nie była.

2

Odp: Jak odszukać wiadomości z inną datą utworzenia niż datą odebrania

Różnica tych dat może być także spowodowana tym, że importowałeś wiadomości z plików - i jeśli nie były to pliki w formacje skrzynki pocztowej Uniksa, to jako data odbioru jest ustawiana bieżąca data. Jest to całkowicie normalne, ponieważ informację o dacie odbioru ma program, a nie ma jej w wiadomości.

Spróbuj zaznaczyć wszystkie wiadomości i wyeksportuj je do pliku w formacie Unix. Potem zaimportuj je do jakiegoś tymczasowego folderu i sprawdź czy daty Ci odpowiadają. Nie wiem czy to rozwiąże Twój problem, ale chyba nie ma innego sposobu skorygowania tego "błędu" (który nie jest błędem, lecz wynika z przyjętego działania programu). Filtry raczej tu nie pomogą, bo za ich pomocą co najwyżej można wybrać wiadomości o określonej dacie odbioru i utworzenia, nie można jednak tych dat porównywać.

Różnica dat utworzenia i odbioru jest całkiem naturalna, ponieważ wiadomości jakiś czas przebywają na serwerze.

3

Odp: Jak odszukać wiadomości z inną datą utworzenia niż datą odebrania

Dzięki za odpowiedź!
Sprawa wygląda tak, że baza wiadomości o których mówię, to wszystkie moje najważniejsze maile z lat 2001-2005. Miałem je w czeluściach swojego dysku twardego razem z programem The Bat! Obecnie przenoszę je na Gmaila za pomocą folderów IMAP, ponieważ chcę mieć do nich dostęp przez sieć z dowolnego miejsca. Problem polegał na tym, że o ile w Bacie wszystko wyświetlało się dobrze, bo ustawiłem sobie sortowanie po "received" (czyli dacie pojawienia się wiadomości w skrzynce odbiorczej), to już podczas importu przez IMAP Gmail pobiera datę na nagłówków wiadomości, czyli datę "created". Problem polega na tym, że w niektórych wiadomościach data w nagłówku jest zła (nie jestem ekspertem, więc nie jestem w stanie stwierdzić dlaczego), przez co w poczacie robi się bałagan. Pomyślałem, że odszukam problemowe wiadomości i ręcznie zmienię datę w nagłówku (eksportując maila do pliku w formacie unix, zmieniając, a następnie importując znowu), jednak pozostaje jeszcze kwestia odszukania owych problemowych wiadomości i właśnie tutaj pojawił się problem, jak zrobić to nie robiąc wszystkiego na oko. Wymyśliłem sobie kilka technik wspomagania ręcznego przeglądania tych wiadomości (np. sortuję je według received i szybko przewijam obserwując czy nagle w kolumnie created nie pojawi się zupełnie inny rok - wbrew pozorom całkiem sprawnie udaje się taką różnicę wyłapać). Niemniej jednak pomyślałem sobie, że może dałoby się to jakoś zautomatyzować.

BTW
Sposób, który zaproponowałeś, czyli wyeksportowanie wiadomości, a następnie ponowne ich zaimportowanie jest przydatny w sytuacji, gdy to pole received ma złą wartość (bo wtedy The Bat po ponownym imporcie wstawia w nie wartość z created). Miałem okazję z niego kiedyś korzystać. smile

Jeszcze raz dzięki za odpowiedź i zachęcam do ewentualnych kolejnych przemyśleń!

4

Odp: Jak odszukać wiadomości z inną datą utworzenia niż datą odebrania

Mam pewien pomysł, który z grubsza sprawdziłem w działaniu i który może się przydać do selekcji wiadomości o datach odbioru różniących się co najmniej o 1 dzień. Polega to na wykorzystaniu filtra, który zapisuje do pliku tekstowego identyfikatory wiadomości, w których występuje różnica owych dat.

Sam filtr jest banalnie prosty, warunek może być dowolny a operacją jest eksport wiadomości do pliku tekstowego. Szablon tego eksportu jest następujący:

%_rec='%ORcvDate="yyyymmdd"'%-
%_cre='%ODate="yyyymmdd"'%-
%_diff='%Calc="%_rec-%_cre"'%-
%IfN:%_diff<>0:'mid:%SetPattRegexp="<(.*)>"%RegexpMatch="%OMsgID"'

Jego wynikiem jest tekst mid:identyfikator_wiad@domena.konto.pl, czyli swoisty URL, który po skopiowaniu do edytora pozwoli po kliknięciu odszukać daną wiadomość. Po wyborze większej liczby wiadomości uruchom ręcznie ten filtr i utworzony plik tekstowy skopiuj po prostu do edytora wiadomości. Można to jeszcze dalej przekształcać, ale o tej porze nic już mi nie przychodzi do głowy.

5

Odp: Jak odszukać wiadomości z inną datą utworzenia niż datą odebrania

Dzięki!
A jeśli chciałbym zmienić wartość na inną niż różnica jednego dnia, to wystarczy, że zamienię "%_diff<>0" na np. ""%_diff<>9"?

6

Odp: Jak odszukać wiadomości z inną datą utworzenia niż datą odebrania

Ponieważ różnica dat może być na skutek jakiegoś błędu ujemna, należałoby badać wartość bezwzględną tej róznicy. Niestety, The Bat! nie potrafi tego obliczyć, zatem można się posłużyć kwadratem tej różnicy i sprawdzać czy nie jest on większy niż dana liczba.

W Twoim przypadku, gdy chcesz odszukać wiadomości o datach różniących się co najmniej o x dni, musisz zmienić szablon na następujący:

%_rec='%ORcvDate="yyyymmdd"'%-
%_cre='%ODate="yyyymmdd"'%-
%_diff='%Calc="%_rec-%_cre"'%-
%_diff2='%Calc="%_diff*%_diff"'%-
%IfN:%_diff2>=xx:'mid:%SetPattRegexp="<(.*)>"%RegexpMatch="%OMsgID"'

Zamiast xx w ostatnim wierszu musisz wstawić kwadrat szukanej różnicy, czyli np. dla różnic co najmniej 9-dniowych należy tam wpisać liczbę 81.

Mam jeszcze pewien pomysł jak to dalej zautomatyzować, czyli np. jak wyeksportować takie wiadomości do pliku uniksowego. Wtedy wystarczyłby prosty import z tego pliku i różnice zostałyby skorygowane. Po sprawdzeniu napiszę czy jest to możliwe.

P.S. Przenoszę wątek do sekcji Szablony i filtry, bo raczej tam powinien trafić.

7

Odp: Jak odszukać wiadomości z inną datą utworzenia niż datą odebrania

Dzięki!
Ale szczerze mówiąc mam problem z użyciem napisanego przez Ciebie kodu. Nie korzystałem dotychczas z tak zaawansowanych funkcji programu The Bat. Od dłuższego czasu googlam, gdzie właściwie powinienem wkleić napisany przez Ciebie filtr. Pobrałem też podręcznik użytkownika z tej strony i czytam różne rzeczy o filtrach i szablonach ale nadal nie mogę dojść, co z tym zrobić. Jak właściwie tego użyć, tzn. gdzie wkleić? Proszę o wyrozumiałość smile

8

Odp: Jak odszukać wiadomości z inną datą utworzenia niż datą odebrania

The Bat!, jak Ci zapewne wiadomo, posługuje się szablonami do różnych celów. Szablony to rodzaj programów, które mogą wykonywać operacje, głównie na tekście, korzystając między innymi z makropoleceń. Szablony występują w różnych miejscach (patrz podręcznik), między innymi w filtrach przy eksporcie wiadomości do pliku.

Twój filtr ma eksportować do pliku tekstowego identyfikator wiadomości o określonych właściwościach. Ten identyfikator jest wynikiem działania podanego przeze mnie szablonu, który należy wkleić w okienku konfiguracji operacji filtru po kliknięciu przycisku Szablon - patrz rozdział Operacje wykonywane przez filtry, opis operacji Eksportuj wiadomość. W tym oknie zaznacz także opcję dopisywania do istniejącego pliku, tak aby po odfiltrowaniu kolejnych wiadomości nie niszczyć poprzednich wyników.

9

Odp: Jak odszukać wiadomości z inną datą utworzenia niż datą odebrania

Dzięki za przystępne wyjaśnienie. Odpaliłem filtr, ustawiłem mu wartość na 20 dni (czyli wpisałem wartość 400) i zadziałał. Dla pewności zrobiłem sobie w Bacie folder w którym umieściłem 15 wiadomości z których wszystkie powinny zostać wykryte, ponieważ miały różne daty. Z jakiegoś powodu filtr wyłowił tylko 10 z nich. Teraz patrzę na nie i próbuję wyłapać, co ma ze sobą wspólnego skutecznie przefiltrowana 10 i nieskutecznie przefiltrowana 5. We wszystkich 15 pzrypadkach oczywiście różnica jest większa niż 20 dni.

10 (edytowany przez semp 2010-02-03 11:56:13)

Odp: Jak odszukać wiadomości z inną datą utworzenia niż datą odebrania

OK, chyba już wiem w czym problem. Przyjrzałem się temu filtrowi i policzyłem sobie coś ręcznie dla przykładowego maila. Załóżmy, że chcę znaleźć różnice większe niż 20 dni.  Czy to nie jest tak, że ten filtr odejmuje od siebie po prostu dwie duże liczby, które zbudował na podstawie dat?

Jeśli dobrze rozumiem, filtr najpierw pobiera datę received, która w moim przypadku wynosi powiedzmy 20050202. Następnie odejmuje od niej datę utworzenia, powiedzmy 20050102 i wychodzi mu wartość 100 (choć w rzeczywistości odstęp pomiędzy tymi dniami to 30 dni).

W końcu podnosi tę wartość do kwadratu i otrzymuje 10000 i sprawdza, czy jest większa od kwadratu dni, czyli w moim przypadku 20*20=40.

Klasyfikuję tę wiadomość jako taką, w której data jest zła i słusznie.

Ale weźmy inny przykład, na przykład wiadomość odebrana dnia 20050102 a utworzona 20041231. Wtedy mamy 20050102-20041231=8`871. Po podniesieniu do kwadratu otrzymujemy wartość 177`844`413`611, która też jest większa od 400, choć rzeczywista różnica pomiędzy wiadomościami to zaledwie 3 dni.

Czy nie jest to jakiś trop w kierunku tego, skąd biorą się błędy? Może chodzi o to, że odejmując YYYYMMDD od YYYYMMDD nie bierzemy pod uwagę tego, że miesiąca ma w przybliżeniu 30 dni a miesięcy w roku jest 12, tylko odejmujemy od siebie dwie duże liczby nie biorąc pod uwagę tego, że np. liczba 20109999 nie może tutaj istnieć?

Mam nadzieję, że nie zakręciłem za bardzo. smile




Może więc w jakiś sposób zmusić  Bata, żeby przekodował te daty w następujący sposób:
data2= DD + 30 * MM + 365 * YYYY
i dopiero je od siebie odejmował?

Wtedy oczywiście założylibyśmy, że każdy miesiąc ma z grubsza 30 dni, ale takie uproszczenie niewiele zmienia. Możnaby nawet od każdego YYYY odjąć liczbę 2000, żeby operować mniejszymi liczbami, bo i tak wszystkie wiadomości mają daty od roku 2000 do 2005. Wtedy ten podany wyżej przykład, który wcześniej nie zadziałał, miały szansę zadziałać, bo:
data2_received= 02 + 30*01 + 5*365=1`857
oraz
data2_created=31 +12*30 + 4*365=1`851

A następnie data2_received - data2created=6
co podniesione do kwadratu daje 36, czyli liczbę mniejszą od 400, a więc zgodnie z oczekiwaniami wiadomosc nie byla by zaklasyfikowana do problemowych.

Pytanie tylko czy to moje rozumowanie ma sens i jak przekodować je na język the Bata. Z informatyką ani programowaniem nie mam nic wspólnego. hmm