Problem z odbieraniem poczty — "invalid argument to data encode"

0

Od dłuższego czasu używam programu w Delphi do odbierania poczty i analizowania jej zawartości. Do niedawna wszystko hulało idealnie, aż ktoś wpadł na pomysł, żeby zmienić format daty w przesyłanych wiadomościach.

Nowy format wygląda tak: wt., 05 pa 2021 0043 +0200 a stary tak: 05.10.2021, 06:22

Instrukcja w delphi: POP.RetrieveHeader(intIndex, Msg); wysypuje się z komunikatem invalid argument to data encode.
Nie wiem jak to przeskoczyć, bo wygląda na to że problem tkwi w samej bibliotece.

0

a czego używasz do odbioru poczty?

0

Może przesiądź się na pisanie dodatków do Thunderbirda?

https://developer.thunderbird.net/add-ons/about-add-ons

0

A w ogóle czym jest POP?

0

Pocztę odbieram też w thuderbirdzie i on sobie z tym radzi bez problemu. Problem polega na tym że dziennie przychodzi ok 1500 maili z informacjami o różnych zdarzeniach na komputerach u klientów i muszę je odpowiednio segregować, bo ręcznie do jest nie do ogarnięcia. Do odbierania używam komponentu z biblioteki INDY IdPOP3 i tam się ten problem pojawia.

0

Próbowałeś zaktualizować Indy do najnowszej wersji? https://github.com/IndySockets/Indy

0

@Tadeusz Jonczyk: 3 posty wyżej podałem ci rozwiązanie i zapytałem się czy to przypadkiem nie jest wątek rozpoczęty na SO przez ciebie, bo też jest sprzed kilku dni.

0

Na stack... niczego nie wrzucałem . Zbieg okoliczności. Sprawdzę i dam znać, dzięki.

0
Tadeusz Jonczyk napisał(a):

Pocztę odbieram też w thuderbirdzie i on sobie z tym radzi bez problemu.

No ale mi nie chodzi o odbiór poczty.
Po prostu jak napiszesz dodatek do Thunderbirda, to on będzie Ci robił te operacje, które chcesz robić w Delphi ;)

0

@kAzek: Używam jeszcze delphi 6 - taką mam licencję. Niestety pod tym linkiem nie znalazłem odpowiedniego package. Szukłąem też tutaj: https://indy.fulgan.com/ Znowu nic
@kAzek: Używam jeszcze delphi 6 - taką mam licencję. Niestety pod tym linkiem nie znalazłem odpowiedniego package. Szukłąem też tutaj: https://indy.fulgan.com/ Znowu nic

@Spine: Nie próbowałem nigdy takich rozwiązań. Ten program korzysta z baz danych i jest odrobinkę skomplikowany, więc raczej nie przejdę z tym problemem naTB

0

@Tadeusz Jonczyk są package do starszych wersji tylko w podfolderach
W temacie Zainstalowanie Indy 10 na Delphi 7 PE pisałem na temat zmiany wersji Indy na 10 (wprawdzie temat dotyczył Delphi 7 ale w 6 będzie podobnie).
Tylko musisz się liczyć z tym że Indy 9 (a takie zapewne masz skoro Delphi 6) nie jest za bardzo kompatybilne z Indy 10 wiec może Cię czekać jeszcze trochę zmian w projekcie.

0

@skrzat: Nie wiem czy wszystko dobrze zrozumiałem. Zamiana formatu daty w stringu to drobnostka. Problem polega na tym że podczas wywołania POP.RetrieveHeader(intIndex, Msg) już wywal błąd. Nie ma za bardzo jak tego obejść, ponieważ pod msg nic się nie podstawia. Od razu błąd. Gdybym mógł odczytać wiadomość np. do jakiegoś stringa, albo tablicy nie byłoby problemu. Ręcznie wyciągnąłbym z niej interesujące mnie dane. Funkcje POP.RetrieveHeader(intIndex, Msg) lub POP.Retrieve(intIndex, Msg), które to robią wylatują z błędem

@kAzek: Chyba mam coś z oczami. Przejrzałem, wszystkie katalogi. Albo to jest ukryte pod jakąś dziwną nazwą, albo ślepy jestem. Mogę prosić o ścieżkę?

0

Pobierz indy z https://github.com/IndySockets/Indy
a ścieżki przecież masz podane np. (in Lib\System) :
Zainstalowanie Indy 10 na Delphi 7 PE

0

Skoro chcesz tylko posegregować maile, to wystarczy użyć filtrowania wiadomości w Thunderbirdzie i maile trafią do różnych podfolderów już posegregowane

0

@skrzat: Niestety nie tylko posegregować. To jest trochę bardziej skomplikowane. A nawet znacznie bardziej.

@kAzek: Pobrałem INDY i inne potrzebne pliki, ale niestety wyskakuje błąd line too long.

0

@Tadeusz Jonczyk Gdzie taki błąd? Napisz dokładnie, bo nie wiem za bardzo o co chodzi. Może edytor od Delphi 6 nie lubi za długich linii tekstu i trzeba w niektórych miejscach podzielić kod źródłowy.

0

Np. IDAntiFreezeBase:

<!DOCTYPE html>
<html lang="en" data-color-mode="auto" data-light-theme="light" data-dark-theme="dark">
  <head>
    <meta charset="utf-8">
  <link rel="dns-prefetch" href="https://github.githubassets.com">
  <link rel="dns-prefetch" href="https://avatars.githubusercontent.com">
  <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com">
  <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/">
  <link rel="preconnect" href="https://github.githubassets.com" crossorigin>
  <link rel="preconnect" href="https://avatars.githubusercontent.com">



  <link crossorigin="anonymous" media="all" integrity="sha512-d4XC7S3D2O/G0TvZjbbtWpDgCLyqvsXCX4K0DUJVfSwpV8ySOlchU43C/9mcyyHtCnczq4eoCl/e3fzC9uXxGA==" rel="stylesheet" href="https://github.githubassets.com/assets/light-7785c2ed2dc3d8efc6d13bd98db6ed5a.css" /><link crossorigin="anonymous" media="all" integrity="sha512-uEgC6AoKK1gK/XX3HlE4+2pdmfa3CUGgk9GV+7h+h0dtALsvueFLg+18JnwLD1axmkp744IzWjFcfHZTxmQyMQ==" rel="stylesheet" href="https://github.githubassets.com/assets/dark-b84802e80a0a2b580afd75f71e5138fb.css" /><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" integrity="sha512-KQFKp2zcS4QM9du72skcYxPfuDslYljsOd9hsZFHSQl7WnkzjR0KkkuMbY7KFRWTerb8KbAYy11eD2ZoFgVyJg==" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-29014aa76cdc4b840cf5dbbbdac91c63.css" /><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" integrity="sha512-Bldh8KfOmuQXEarLeCx5IxrQms1DznU4qGbQ6oCrAVNdd4jea40lyBHdddi7o1P4dhler91XHyO9+iBe7m6LzQ==" rel="stylesheet" da
  <link crossorigin="anonymous" media="all" integrity="sha512-pdsKnTx5DQsAIFl4LRo+6kToLThjqPiHwxtNpmJvTGEykcAT8/o5gMBJoH9mCjOlN2c9StfrDy69cqNklPIPDw==" rel="stylesheet" href="https://github.githubassets.com/assets/frameworks-a5db0a9d3c790d0b002059782d1a3eea.css" />
    <link crossorigin="anonymous" media="all" integrity="sha512-UgTwpV2BaAPM0fSjaZmILCjg4hjddZz0k6/Y9zG57vz+sDxI9eyWFNrhQSOOOCACHk7ooVE7lwMHrB1n/932iQ==" rel="stylesheet" href="https://github.githubassets.com/assets/behaviors-5204f0a55d816803ccd1f4a36999882c.css" />
.....

Coś przy pobieraniu zwaliłem

Teraz widzę. Robiłem PPM i zapisz element docelowy. Jak w niego klikam nie pobiera tylko się otwiera źródło. Jest na to jakiś inny sposób?

0

Wejdź https://github.com/IndySockets/Indy
naciśnij zielony przycisk "Code" a później z menu "Download ZIP". Pobierz i wypakuj w jakieś miejsce gdzie masz prawo zapisu i tak aby ten folder mógł tam zostać na stałe (bo przecież przy instalacji dodajesz ścieżki do niego).

0

screenshot-20211012152611.png
Czy to oznacza że nie usunąłem starszej wersji biblioteki?

0

A zrobiłeś wszystko jak w opisie, przede wszystkim dodałeś wszystkie ścieżki do Library path?

0

Ścieżki dodane, jak wywaliłem poprzednią wersję INDY to kompilacja package przeszła. Niestety program mi się teraz wysypuje już na etapie kompilacji:

[Error] IdURI.pas(93): Undeclared identifier: 'TIdIPVersion'
[Error] IdURI.pas(102): Undeclared identifier: 'IIdTextEncoding'
[Error] IdCharsets.pas(3889): Undeclared identifier: 'TextIsSame'
[Fatal Error] IdURI.pas(133): Could not compile used unit 'IdCharsets.pas'

Wszystko niestety dotyczy błędów w samej bibliotece

0

@Tadeusz Jonczyk Nie wiem co kombinujesz ale IIdTextEncoding, TIdIPVersion i TextIsSame są na 100% zdefiniowane w IdGlobal.pas a odniesienie do tego modułu jest w uses IdCharsets.pasi IdURI.pas więc wszystko powinno się ładnie kompilować.
Prawdopodobnie nie usunąłeś dobrze poprzedniej wersji albo nie kompilujesz w kolejności którą podałem.
Usuń wszystkie BPL od Indy (nazwy takie jak package) i DCU o których mowa w opisie, sprawdź czy poprawnie podałeś wszystkie ścieżki i spróbuj jeszcze raz.

UWAGA: biblioteki BPL oprócz %FOLDER_DELPHI%\Bin i %FOLDER_DELPHI%\Projects\Bpl mogą (ale nie muszą) też być czasami w folderze Windows lub Windows\System32

0

W Path nie wpisałem jednej ścieżki. Program się skompilował, ale niestety dalej mam ten sam błąd. Przy wczytywaniu wiadomości i pobieraniu daty pojawia się komunikat jak w temacie "invalid argument to data encode"

0
Tadeusz Jonczyk napisał(a):

Na stack... niczego nie wrzucałem . Zbieg okoliczności. Sprawdzę i dam znać, dzięki.

Zajrzałeś? W pierwszym poście masz rozwiązanie, które trzeba zmodyfikować do twojego formatu daty

0

@skrzat tam nie ma rozwiązania ponieważ on nie ma wpływu na format daty jaki funkcja dostanie (chyba żeby wprowadził zmiany w Indy).
@Tadeusz Jonczyk jak nie wpisałeś ścieżek w Library Path to to po prostu nie miało prawa poprawnie się skompilować więc albo coś ściemniasz albo jakoś dziwnie skompilowało się używając modułów od starej poprzedniej wersji, których nadal poprawnie nie usunąłeś.

Poza tym nie mając kodu nie wiem kiedy pojawia się ten błąd i skąd te maile z takim formatem daty z GMail czy innej poczty... zero info a szklana kula stłuczona w nową nie inwestuję a z fusów nic nie wychodzi.

0

Po Twoim poście z wczoraj poszukałem gdzie się znajduje IDGlobal.pas i dopisałem tą ścieżkę do SEARCH PATH. Dzięki Tobie udało mi się skompilować program. Niestety w dalszym ciągu mam problem z tą datą. Nowa wersja biblioteki zwraca dokładnie ten sam błąd. Tymczasowo zrobiłem w tym miejscu TRY i po błędzie w FINALLY z nagłówka wiadomości odczytuję datę: Copy(Msg.Headers[9],16,31). Ale jest to robota od d... strony

Błąd pojawia się przy takiej niewinnej instrukcji: POP.RetrieveHeader(intIndex, Msg) (TiDPOP3.RetrieveHeader)

0

To w takim razie skąd te maile z takimi powodującymi błąd nagłówkami, bo ja jak specjalnie zrobiłem testową namiastkę klienta poczty i odczytuję maile (właściwie same ich nagłówki) używając RetrieveHeader z GMail nie mam błędu.

0

[OK] Synchronizacja wynikow badań mM 04.10.2021 12_15_01 - 121_201052.pdf[OK] Synchronizacja wynikow badań mM 06.10.2021 09_15_34 - 121_201052.pdf
Jeden z tych maili przyszedł przed zmianą formatu daty, a drugi po. Z tym pierwszym RetrieveHeader sobie radzi, z tym drugim niestety nie.

0

Podałeś, że nowy format daty wygląda tak:
wt., 05 pa 2021 0043 +0200
natomiast w tej wiadomości
screenshot-20211013150740.png
początek się raczej nie zgadza, więc błąd invalid argument to data encode. jest raczej jak najbardziej zasadny. Pewnie jest problem z polskimi znakami i tam miało być śr.

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