![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 764 Pomógł: 3 Dołączył: 30.04.2003 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
mam do napisania skrypt, który będzie łączył się z dowolnym serwerem pocztowym, następnie pobierał e-maile, w których będą zapisane pliki CSV. Pliki te będę musiał odczytać i zapisane w nich dane odpowiednio obrobić. O ile z tym ostatnim nie będzie problemu to za bardzo nie wiem jak mam odebrać pocztę z serwera i w jaki sposób wydobyć z maili załączniki. Będę wdzięczny za wszelkie wskazówki. Pozdrawiam. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 70 Pomógł: 0 Dołączył: 21.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
Ten gość chyba szuka pomocy z pop3, IMAP nie jest zbyt praktyczny.
To zagadnienie wykracza poza ramy php, jednak postaram się pomóc. Po pierwsze, wymagana jest znajomość protokołu pop3 (komendy możesz znaleźć poniżej). Wydawać je można po podłączeniu się do serwera pop3 (zakładam, że autor tematu potrafi otwierać połączenie i komunikować się z nim). Kod USER x - podaje nazwę użytkownika x PASS x - podaje hasło x dla użytkownika (wcześniej użyj USER) LIST - zwraca listę wiadomości w formacie [numer] [wielkość w bajtach] ------przykład listy--- 0 6073 1 80337 ------------------------- RETR x - zwraca wiadomość o numerze x DELE x - usuwa wiadomość o numerze x z serwera Po wysłaniu RETR w celu otrzymania wiadomości, ekran (ewentualnie strumień wyjściowy) zostanie zasypany danymi, które nierzadko są zakodowane z użyciem base64. W celu ich przetworzenia (gdybyśmy nie znali kodowania na pamięć, ach ta skleroza) należy najpierw sprawdzić nagłówki listu (które nie są kodowane chyba że osoba wysyłająca była wariatem). Jeśli natkniemy się na base64-encoded lub podobny ciąg, mozna użyć funkcji base64_decode(). Należy jednak pamiętać o uprzednim rozbiciu e-maila na segmenty używając np. funkcji explode(). Całe zagadnienie jest dosyć skomplikowane, szczególnie jeśli chodzi o przetwarzanie załączników (też gdzieś w nagłówkach, potem trzeba wyłapywać bloki danych i rozpoznawać jako pliki). |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 764 Pomógł: 3 Dołączył: 30.04.2003 Ostrzeżenie: (0%) ![]() ![]() |
@slash12345 - Dzięki za odpowiedz - chyba właśnie o to mi chodziło.
Cytat (zakładam, że autor tematu potrafi otwierać połączenie i komunikować się z nim). No właśnie nie do końca umiem, ale coś pogrzebałem po sieci i napisałem coś takiego:
Teraz stanąłem przed problemem, w jaki sposób wyświetlić listę wiadomości lub też samą treść e-maila (po wybraniu go za pomocą RETR. Próbowałem coś za pomocą fread, ale w przypadku wiadomości nie zczytywał mi jej całej - do końca. Będę wdzieczny za każdą wskazówke lub fragment pomocnego kodu. Bo jak rozumiem, później już pozostanie mi tylko to co się "wyświetli" obrobić - odstać się do załącznika (najprawdopodobniej nie będzie on kodowany) i już pozostanie mi jego obróbka - zgadza się? Jeszcze raz dzięki za pomoc, Pozdrawiam. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 70 Pomógł: 0 Dołączył: 21.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
Problem leży zapewne w samym odczytywaniu. Strumień zachowuje się bardzo podobnie do pliku, więc możliwe, że funkcja odczytująca "brała" za mało znaków. Polecam zastosowanie feof(). Skrypt został podzielony na dwie części, żeby umożliwić wprowadzenie danych. Nie testowalem go, ale powinien dzialac.
Mam nadzieję, że wskazówki okażą się pomocne. A teraz: ilu nawiasów i średników zapomniałem? EDIT: Zmieniłem trochę ten skrypt, poprzednio wykonanie zajmowało około 30 sekund... dopóki nie otrzymywaliśmy timeouta. Teraz niestety działa tylko w PHP5. W celu uzyskania kompatybilności trzeba by znaleźć funkcję podobną do stream_get_contents lub napisać własną. Testowane przez matracha, podobno działa. Ten post edytował slash12345 22.04.2006, 13:43:19 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 764 Pomógł: 3 Dołączył: 30.04.2003 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za napisanie tego skryptu. Na jego podstawie przygotowałem własny dzięki czemu mogę już odczytać treść maila. W chwili obecnej mam jeden (przynajmniej na razie) problem. Treść maila, który odczytuję jest mniej więcej taki:
Kod X-From_: ******** Fri Apr 21 21:53:22 2006 Return-Path: ... Kod From: =?iso-8859-2?B?TWljaGGzIEh5v3k=?= To: Date: Fri, 21 Apr 2006 21:52:48 +0200 MIME-Version: 1.0 Content-Type: multipart/mixed; ... Kod This is a multi-part message in MIME format. ------=_NextPart_000_0003_01C6658D.EFEA9480 Content-Type: text/plain; charset="iso-8859-2" Content-Transfer-Encoding: 7bit ------=_NextPart_000_0003_01C6658D.EFEA9480 Content-Type: application/vnd.ms-excel; name="MD_06042001.CSV" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="MD_06042001.CSV" .... Kod Agent;Miejscowosc;Ulica;Kod pocztowy;Wojewodztwo;Godziny otwarcia D.H. Stokrotka;Bardo;ul. G=B3=F3wna = 11;57-256;Dolno=9Cl=B9skie;06:00-21:00 Sklep Miros=B3aw Ustupski;Bardo;ul. Potwor=F3w = 29;57-256;Dolno=9Cl=B9skie;07:00-20:00 Sklep Spo=BFywczo-Przemys=B3owy Dana;Bardo;ul. Fabryczna = .... O o dostanie się do pliku nie będzie większym problemem, to w chwili obecnej mam problem z prawidłowym odczytaniem polskich znaków w treści załącznika. To co pokazuje mi się w przeglądarce to jedna wielka sieczka. Próbowałem jakis kombinacji z iconv, ale nie udało się nic zrobić. Czy jest jakiś sposób na prawidłowe "przeczytanie" załącznika? Proszę raz jeszcze za podpowiedź. Z góry dziękuję. Pozdrawiam. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 70 Pomógł: 0 Dołączył: 21.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
Może jest to aż zbyt proste rozwiązanie, ale popatrz trochę na sekwencje znaków w treści. O ile nie jest zapisana bitowo, możesz odgadnąć, jakie słowo jest zapisane. Następnie przygotuj tablicę (array) sekwencji i użyj funkcji strtr w pokazany niżej sposób:
W takim przypadku ciąg "=B3" ze słowa "G=B3=F3wna" zostanie zamieniony na "ł", podobnie jak w "Miros=B3aw". Możliwe, że ma to jakiś związek z kodami szesnastkowymi znaków. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 13:35 |