|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2002-09-15 16:35 UTC] taco at osisoft dot nl
I made a class which connects to the POP3 server at localhost. I used fsockopen to connect to the server. When I use a local variable ("$socket") then it works allright. When I store the resource in a class variable ($this->socket) the script will stall on fget*.
Work around for me: I want to use the socket resource in other member functions. After the connection is initialized a class variable references to the local variable ($this->socket =& $socket). In the member function I first must make a local variable and refer it to the class variable ($socket =& $this->socket). I can't use $this->socket directly.
So in short: I can't use a class variable with fwrite and fgets, but instead I must use local variables.
(Hope may description was clear.)
Greetings from Holland
Taco Jan Osinga
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Fri Oct 24 01:00:02 2025 UTC |
I can run this example (using my own pop3 account). Unfortunatly you will see something like this: >> USER xxxx << +OK Welcome to this POP3 server >> PASS xxxx << +OK User is welcome You have .... message(s) As you see the returning messages is always one message behind. With the commented line I wanted to get the welcome message after connection, before authentication. If I therefor uncomment that line, it will stall. I have tried several things, like using a local variable instead of a class variable. That works better, as the title shows, but it still works buggy. often it's alright, but sometimes it keeps stalling. Currently I use this functionality without a class and than it works fine. <? class TPOP3Mail { var $server; var $port; var $user; var $password; var $socket; var $error; function TPOP3Mail($server, $port, $user, $pwd) { $this->server = $server; $this->port = $port; $this->user = $user; $this->password = $pwd; } function Connect() { $this->socket = fsockopen($this->server, $this->port, $errno, $errstr, 3); if($this->socket <= 0) { $this->error = "Could not connect to $this->server on port $this->port. Connection Error $errno. Reason: $errstr"; return 0; } $this->error = ""; // fgets($this->socket, 1024); //Catching server's welcome messages print ">>: USER $this->user<BR>\n"; fwrite($this->socket, "USER $this->user\r\n"); $result = fgets($this->socket, 1024); print "<<: $result<BR>\n"; if (substr($result, 0, 3) == "+OK") { print ">>: PASS xxxx<BR>\n"; fwrite ($this->socket, "PASS $this->password\r\n"); $result = fgets($this->socket, 1024); print "<<: $result<BR>\n"; if (substr($result, 0, 3) != "+OK") $this->error = "Error while logging on ($result)"; } else $this->error = "Error while logging on ($result)"; if ($this->error != "") return 0; return $this->socket; } function ShowMail($nr) { fwrite ($this->socket, "RETR $nr\r\n"); $response = fgets ($this->socket, 1024); $i = 4; $s = ""; //stores byte size of the message while ($response[$i] != " ") $s .= $response[$i++]; $response = fread($this->socket, $s); fgets ($this->socket, 1024); return $response; } function MailCount() { fwrite ($this->socket, "STAT\r\n"); $response = fgets ($this->socket, 1024); $i = 4; $s = ""; while ($response[$i] != " ") $s .= $response[$i++]; return $s; } } //Please use an pop3 account in the following line. $webmail = new TPOP3Mail("server", "110", "user", "pwd"); if (!$webmail->Connect()) print $webmail->error; print "You have " . $webmail->MailCount() . " message(s).<BR><BR>\n"; print nl2br($webmail->ShowMail(1)); ?>