Hej.

Napisalem sobie prosciutka funkcje do wysylania maila za pomoca polaczenia socketowego z serwerem i wydawania mu polecen SMTP/ESMTP:

  1. <?php
  2.  
  3. $revDNS = gethostbyaddr( $_SERVER['SERVER_ADDR'] );
  4.  
  5. function putData( $socket, $data )
  6. {
  7. fputs( $socket, $data . 'rn' );
  8. print &#092;"<font color=\"red\">$data</font>\";
  9. }
  10.  
  11.  
  12. function getData( $socket, $g )
  13. {
  14. while( ( substr( $g,0,3) < 400 ) AND ( substr( $g,3,1 ) <> ' ' ) )
  15. {
  16. if( ! ($g = fgets( $socket, 100 )) )
  17. {
  18. print &#092;"error<br>\";
  19. }
  20. print &#092;"$g<br>n\";
  21. }
  22. return substr( $g,0,);
  23. }
  24.  
  25. function sendMail()
  26. {
  27. global $answer, $revDNS;
  28.  
  29. // CONFIG
  30. $from = 'someone@example.com';
  31. $server = 'smtp.example.com';
  32. $pass = 'example';
  33.  
  34. $socket = fsockopen( $server, 25 );
  35.  
  36. switch( socket_get_status( $socket ) )
  37. {
  38. case 'timed_out':
  39. print 'The connection timed out<br>';
  40. break;
  41. case 'blocked':
  42. print 'The connection was blocked<br>';
  43. break;
  44. case 'eof':
  45. print 'Reached EOF while connecting<br>';
  46. break;
  47. }
  48.  
  49. if( $socket )
  50. {
  51. print 'Connection successful<br>';
  52. $answer = getData( $socket, $answer );
  53. putData( $socket, &#092;"EHLO $revDNS\" );
  54. $answer = getData( $socket, $answer );
  55. }
  56. else
  57. {
  58. print 'No connection';
  59. }
  60. }
  61.  
  62. ?>


Polaczenie jest tworzone bez problemu, odbieram sobie pierwszy komunikat od serwerai wysylam swoj pierwszy:

Kod
Connection successful
220 smtp.poczta.onet.pl ESMTP (6) our local time is now Mon, 17 Jan 2005 13:21:38 +0100
EHLO moj.revdns.provider.pl


Teraz serwer zwraca mi pare linijek, w ktorych sie chwali tym, co obsluguje. No i wlasnie tutaj pojawia sie problem. Bo pierwsza linijke (220...) mi odbiera, a jak odkomentuje nastepne wywolanie getData, to skrypt sie zawiesza. Wyglada tak, jakby byl w nieksonczonej petli, ale nie mam pojecia dlaczego. Wydaje mi sie, ze warunek w while'u jest dobry. Probowalem nawet samo substr, ale to nic nie dalo.

Olek

Hmm... nie mozna dwa razy pod rzad? Bez sensu troche, wlasnie teraz by sie przydalo. No ale coz. W kazdym razie juz wiem czemu nie dzialalo. Wysylalem

  1. <?php
  2.  
  3. 'rn'
  4.  
  5. ?>


zamiast

  1. <?php
  2.  
  3. &#092;"rn\"
  4.  
  5. ?>