[wp-trac] Re: [WordPress Trac] #3568: class-pop3.php does not always
correctly read till end-of-mail on mail server
WordPress Trac
wp-trac at lists.automattic.com
Fri Jan 12 18:20:10 GMT 2007
#3568: class-pop3.php does not always correctly read till end-of-mail on mail
server
----------------------------+-----------------------------------------------
Reporter: fix22 | Owner: anonymous
Type: defect | Status: new
Priority: high | Milestone: 2.1
Component: Administration | Version: 2.0.5
Severity: major | Resolution:
Keywords: |
----------------------------+-----------------------------------------------
Changes (by foolswisdom):
* severity: critical => major
* milestone: => 2.1
Old description:
> http://wordpress.org/support/topic/8035
>
> Found out some more info on this as the fix above does not fix all
> issues. It only worked for some e-mails that had a subject line with a
> "'" in it.
>
> Also - You need to do the same for the $content variable too if you
> haven't done that:
>
> preg_replace("/'/","\\'",$content),
>
> I still had the issue on [http://advertising-info.org/ advertising-
> info.org] so I started throubleshooting some more. It has cost me about
> 10 hours to find what the issue was. Finally I found it (it's a bug in
> the standard wordpress code and it is up to 2.0.5 so I got to report this
> to the wp coders as well):
>
> In class-pop3.php (in /wp-includes/) there is the following line in the
> function "get":
>
> while ( !ereg("^\.\r\n",$line))
>
> This is incorrect! What happens I think is the following: if a certain
> message had a "." on a newline (I think this may happen for instance if
> the "." was just cut-off by the the max lenght of the line and was
> therefore placed on the next line, or when someone just placed a dot on a
> line and then a \r\n return/newline.)
>
> To fix this issue: swap the above to this:
>
> while (!feof($fp))
>
> While in fact this will not do much (I do not think that the mail server
> will actually report an end-of-file) the following piece of the "get"
> function will now kick-in;
>
> if(empty($line)) { break; }
>
> And stop reading from the mail server when the end of the message was
> reached.
>
> So the actual issue was that the mail server was unable to delete the
> message as the message was not completely read and was still being
> processed. That is where the error "Oops POP3 delete: Command Failed
> []\n" comes from (it cannot delete the message since it is still open and
> it will not give an error ("[]") because it cannot do (delete) what the
> postie-functions.php is asking it to do (delete the messsage).
>
> I tested this on the message that was failing (line 52 had just a "." on
> it) and it worked!
>
> If you want to test for yourself if this is the issue you are having,
> simply change the code in class-pop3.php to the following:
>
> while (!feof($fp))
> {
>
> $MsgArray[$count] = $line;
> $count++;
> $line = fgets($fp,$buffer);
> echo "Read mail line".$count.": ".$line."\n";
> if(empty($line)) {
> echo "Read mail line - Break Issued\n";
> break; }
> }
>
> This will output all the lines while reading from the mail server (you
> can see the output of this by manually runing postie from the options in
> WP)
>
> Hope this helps!
New description:
http://wordpress.org/support/topic/8035
Found out some more info on this as the fix above does not fix all issues.
It only worked for some e-mails that had a subject line with a "'" in it.
Also - You need to do the same for the $content variable too if you
haven't done that:
preg_replace("/'/","\\'",$content),
I still had the issue on [http://advertising-info.org/ advertising-
info.org] so I started throubleshooting some more. It has cost me about 10
hours to find what the issue was. Finally I found it (it's a bug in the
standard wordpress code and it is up to 2.0.5 so I got to report this to
the wp coders as well):
In class-pop3.php (in /wp-includes/) there is the following line in the
function "get":
while ( !ereg("^\.\r\n",$line))
This is incorrect! What happens I think is the following: if a certain
message had a "." on a newline (I think this may happen for instance if
the "." was just cut-off by the the max lenght of the line and was
therefore placed on the next line, or when someone just placed a dot on a
line and then a \r\n return/newline.)
To fix this issue: swap the above to this:
while (!feof($fp))
While in fact this will not do much (I do not think that the mail server
will actually report an end-of-file) the following piece of the "get"
function will now kick-in;
if(empty($line)) { break; }
And stop reading from the mail server when the end of the message was
reached.
So the actual issue was that the mail server was unable to delete the
message as the message was not completely read and was still being
processed. That is where the error "Oops POP3 delete: Command Failed []\n"
comes from (it cannot delete the message since it is still open and it
will not give an error ("[]") because it cannot do (delete) what the
postie-functions.php is asking it to do (delete the messsage).
I tested this on the message that was failing (line 52 had just a "." on
it) and it worked!
If you want to test for yourself if this is the issue you are having,
simply change the code in class-pop3.php to the following:
{{{
while (!feof($fp))
{
$MsgArray[$count] = $line;
$count++;
$line = fgets($fp,$buffer);
echo "Read mail line".$count.": ".$line."\n";
if(empty($line)) {
echo "Read mail line - Break Issued\n";
break; }
}
}}}
This will output all the lines while reading from the mail server (you can
see the output of this by manually runing postie from the options in WP)
Hope this helps!
--
Ticket URL: <http://trac.wordpress.org/ticket/3568#comment:3>
WordPress Trac <http://trac.wordpress.org/>
WordPress blogging software
More information about the wp-trac
mailing list