Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: obsługa poczty w php
Forum PHP.pl > Forum > PHP
pawel_k
witam,
mam zamiar (a raczej przymus winksmiley.jpg ) napisania systemu obsługi poczty jako modul do systemu CRM. jesli chodzi o wysyłanie poczty to nie jest to problem, gorzej z pobieraniem poczty i sprawdzanie konta... a ze nie znalazlem nic ciekawego na forum, to zakladam ten temat...

proszę o pomoc jeśli chodzi o kwestie takie jak wymagania stawiane przez taki system (czy konta pocztowe muszą być w jakikolwiek sposób związane z serwerem www, czy są inne ograniczenia), czy są jakieś gotowe biblioteki (najlepiej napisane w php5) lub gotowe moduły do php (chociazby w peclu), czy są stawiane jakiekolwiek wymagania odnosnie apacha czy php, w jaki sposób się komunikować z serwerem poczty itp... wlasciwie cokolwiek co moze sie przydac, szczegolnie Wasze doswiadczenia i sugestie w tym temacie

ps. proszę mnie nie odsyłać do gotowych narzędzi tego typu (wiem że są, np. dobre uebimiay czy roundcube-webmail), bo mi zalezy bardziej na podejsci niz na przegladaniu kodu, a wiem że raczej na pewno juz takie moduły pisaliscie wiec lepiej abyście naprowadzili mnie (i mysle ze nie tylko mnie) jak to ugyżć, z jakich bibliotek skorzystać i jakich problemów mogę się spodziewać...
dtb
manual php: nic dodac, nic ujac
http://pl2.php.net/manual/pl/function.imap-open.php
bim2
A czy jestes jakas alternatywa do tego?? Bo aj nie mam tej funkcji na serwerze ;D
dtb
chyba nie ma. sprobuj wygooglac czegos o protokole pop3 i php
thornag
Poczytaj tez tutaj Piszemy klienta poczty e-mail w php
bim2
Cytat
Tylko jak się do tego zabrać, co jest potrzebne? Otóż do stworzenia takiego czegoś potrzeba php, odrobiny inwencji, oraz rozszerzenia IMAP.

A ja na serwerze nie mam imap, nie robie to na localhosta. Znalazłem tylko skrypt wysyłajacy emaila (z danych smtp) działa na zasadzie fsockopen tyle że musze czytać maile winksmiley.jpg

Skrypt:
  1. <?php
  2. function smtp_mail($mail_to, $subject, $message, $headers)
  3. {
  4. global $mailer, $config;
  5.  
  6.  
  7. if (!$socket = fsockopen($config['smtp_host'], 25, $errno, $errstr, 20))
  8. return false;
  9.  
  10. if (!server_parse($socket, '220'))
  11. return false;
  12.  
  13. if ($config['smtp_user'] != '' && $config['smtp_pass'] != '')
  14. {
  15.  
  16.  fputs($socket, 'EHLO ' . $config['smtp_host'] . "rn");
  17. if (!server_parse($socket, '250'))
  18. return false;
  19.  
  20.  fputs($socket, "AUTH LOGINrn");
  21. if (!server_parse($socket, '334'))
  22. return false;
  23.  
  24.  
  25. fputs($socket, base64_encode($config['smtp_user']) . "rn");
  26. if (!server_parse($socket, '334'))
  27. return false;
  28.  
  29. fputs($socket, base64_encode($config['smtp_pass']) . "rn");
  30. if (!server_parse($socket, '235'))
  31. return false;
  32.  
  33. }
  34. else
  35. {  // Jezeli serwer nie wymaga autoruzacji.
  36. fputs($socket, 'HELO ' . $config['smtp_host'] . "rn");
  37. if (!server_parse($socket, '250'))
  38. return false;
  39. }
  40.  
  41.  
  42. fputs($socket, 'MAIL FROM: <' . $mailer['admin'] . ">rn");
  43. if (!server_parse($socket, '250'))
  44. return false;
  45. fputs($socket, 'RCPT TO: <' . $mail_to . ">rn");
  46. if (!server_parse($socket, '250'))
  47. return false;
  48. fputs($socket, "DATArn");
  49. if (!server_parse($socket, '354'))
  50. return false;
  51. fputs($socket, 'Subject: ' . $subject . "rn");
  52. if (strlen($mail_to))
  53. fputs($socket, 'To: <' . $mail_to . ">rn");
  54. fputs($socket, $headers . "rnrn");
  55. fputs($socket, $message . "rn");
  56. fputs($socket, ".rn");
  57. if (!server_parse($socket, '250'))
  58. return false;
  59. fputs($socket, "RSETrn");
  60. if (!server_parse($socket, '250'))
  61. return false;
  62.  
  63. fputs($socket, "QUITrn");
  64. fclose($socket);
  65.  
  66. return true;
  67. }
  68.  
  69. // Parse a message to the SMTP server.
  70. function server_parse($socket, $response)
  71. {
  72. // No response yet.
  73. $server_response = '';
  74.  
  75. while (substr($server_response, 3, 1) != ' ')
  76. if (!($server_response = fgets($socket, 256)))
  77. return false;
  78.  
  79. if (substr($server_response, 0, 3) != $response)
  80. return false; 
  81.  
  82. return true;
  83. }
  84. ?>
pawel_k
thx za linki, sporo rozjaśniają, jednak po chwili testów wychodzą rózne sprawy, np.:
- w jaki sposób zarządzać załącznikami? teraz widzę że pobierając treść wiadomośći pobiera mi również załącznik i dołancza go do wiadomości tekstowo. czy można w jakiś sposób pobrać tylko załączniki?
przykładowa wiadomość z załącznikiem: (pobrana za pomocą imap_body() )
Kod
string(9985) "This is a multi-part message in MIME format.
--------------080109020501070400030303
Content-Type: text/plain; charset=ISO-8859-2; format=flowed
Content-Transfer-Encoding: 8bit

TEST POLKICH ZNAKÓW: ęóąśłżźćń?ĘÓĄŚŁŻŹĆŃ

--------------080109020501070400030303
Content-Type: application/x-dia-diagram;
name="schema.dia"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="schema.dia"

H4sIAAAAAAAAA+1dXW/jRpZ971/BdV46gFzNYrH4EU1nECSzswtkdoPZZBeYF6MssWW2KVJL
Uq2WHvYh2MX8hsb8jLzmLd3/a6tI2W5JlESRLMp2TgNxZPmKt4riuSzec+6tP/zx/TQy3gVp
Fibx6wtKzAsjiEfJOIwnry9++vGfL72LP3794g/jUHwl/5ukYmrIT8SZ+u31xU2ez7569Wqx

(i tutaj dalsza czesc pliku)

- jakim kodowanie krąży poczta po polsce, czy zawsze jest to ISO-8859-2?
- przykładowo temat składający się z polskich znaków (ęóąśłżźćń?ĘÓĄŚŁŻŹĆŃ) zostaje pobrany jako:
=?ISO-8859-2?Q?=EA=F3=B1=B6=B3=BF=BC=E6=F1=3F=CA=D3=A1=A6=A3=AF=AC?= =?ISO-8859-2?Q?=C6=D1?=
wiec czy zawsze mogę sie spodziewac takiego formatowania?

to sobie sam odpowiem winksmiley.jpg
http://phpsolmag.org/pl/index.php - w artykulach mozna znalezc pdf'a opisujacego budowe klienta pocztowego, co prawda artykul jest bardzo stary i go jeszcze nie sprawdzalem ale mysle ze sama idea jesli chodzi o pobieranie i obrobke maili nie zmienila sie zbytnio...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.