Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Odbieranie poczty, załącznik
mhs
post
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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
slash12345
post
Post #2





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.
  1. <?php
  2. /*
  3. Podrecznik funkcji:
  4. string FetchMyMail( string $host, string $user, string $pass, string $postfield = "nrwiad" );
  5. --Funkcja za pierwszym wywolaniem (gdy nie ma danych z formularza), wyswietla formularz
  6. z lista wiadomosci (niestety bez tematow, gdyz wymagaloby to odczytania calej wiadomosci),
  7. a nastepnie (gdy podamy dane), zwraca tresc wiadomosci. 
  8. Parametr $postfield okresla nazwe pola, z ktorego bierzemy ewentualny numer wiad
    omosci
  9. do pobrania.
  10. */
  11. function FetchMyMail($host,$user,$pass,$postfield="nrwiad")
  12. {
  13. $pol = fsockopen($host,110);
  14. //Uzycie \r\n dla pelnej zgodnosci, nie powinno przeszkadzac
  15. fgets($pol);
  16. fputs($pol,"USER {$user}\r\n");
  17. fgets($pol);
  18. fputs($pol,"PASS {$pass}\r\n");
  19. $resp[0] = fgets($pol,1024); //pobieramy 1 KB danych i umieszczamy w tablicy kodow odpowiedzi
  20. if (substr($resp[0],0,3) !== "+OK") die("Błąd autoryzacji."); //sprawdzamy czy wszystko idzie jak nalezy
  21. //WPROWADZENIE DANYCH
  22. if (!isset($_POST[$postfield]))
  23.  {
  24. fputs($pol,"LIST\r\n");
  25. fgets($pol);
  26. $msgtemp = stream_get_contents($pol);
  27. $msglist = explode("\n",$msgtemp);
  28. foreach ($msglist as $mlk => $mlv) { if ($mlv == "" || $mlv == " " || $mlv == ".") unset($msglist[$mlk]); }
  29. $rstr = "<form action='plik.php' method='POST'>Numer wiadomości do pobrania:<br /><select name='nrwiad'>";
  30. //Linie powyzej mozesz zmienic, nazwe pola przekazujemy jako czwarty parametr funk
    cji
  31. foreach ($msglist as $msk => $msv)
  32.  {
  33. $mnum = substr($msv,0,strpos($msv," ")); //wydobywamy liczbe porzadkowa
  34. $rstr .= "<option value='{$mnum}'>{$msv}</option>\n";
  35.  }
  36. $rstr .= "</select><input type='submit' value='Pobierz!'></form>";
  37. print($rstr); //zamiast print() mozesz dac return, skrypt jest zaprojektowany dla latwosci edycji
  38.  }
  39. else
  40.  { //LUB ZWRACANIE MAILA
  41. fputs($pol,"RETR {$_POST[$postfield]}\r\n");
  42. $mstr = ""; //ta zmienna bedzie napelniona wiadomoscia
  43. $mstr = stream_get_contents($pol);
  44. return $mstr;
  45.  }
  46. /* to ponizej mozesz wyjac z komenta, ale i tak nie robi nic pozytecznego...
  47.  fputs($pol,"QUIT\r\n");
  48.  fclose($pol); */
  49. }
  50. ?>

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
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 8.10.2025 - 05:23