ID:               39507
 User updated by:  rherror404 at gmail dot com
 Reported By:      rherror404 at gmail dot com
 Status:           Open
 Bug Type:         Mail related
 Operating System: Windows
 PHP Version:      5.2.0
 New Comment:

I suspect this may be the same bug mentioned in #31676.  My best guess
is that this is related to multi-threading.


Previous Comments:
------------------------------------------------------------------------

[2006-11-14 04:18:49] rherror404 at gmail dot com

<?
/*
Here it is again, edited slightly
to run on a Linux machine so that
it has its local sendmail do the work.
Concurrent requests to the script were
handled quite nicely.  The huge difference
in this case is the Apache prefork MPM.
*/
define('EXTRAHEADERS', "MIME-Version: 1.0\r\nContent-type: text/html;
charset=iso-8859-1\r\nX-Mailer: PHP\r\n");
define('MAILMSG',
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">
<html><head><title>foo</title><style type='text/css'>
body {margin: 0; font-size: 10pt; font-family: sans-serif, arial;
color: #000000; background-color: #ffffff;}
</style></head><body><div style='font-size: 12pt; background-color:
#ffff00;'>" . date("Y-m-d H:i:s") . "</div>
random junk<br />" .
str_repeat("afhlkhsad;lfj;lkjsa;lfjasd;lkjf;lkjsad;lkfjsad;lkfjsad;lkfja
sd;lfkjasd;lkfjsa;ldf<br />\n", 100) .
"</body></html>");
ini_set('html_errors', FALSE);
define('MAILTO', '[EMAIL PROTECTED]'); // something real
$retval = mail(MAILTO, 'foo', MAILMSG, EXTRAHEADERS);
echo ( $retval ? 'TRUE' : 'FALSE' ) . "\n\n\n";
exit();
?>

------------------------------------------------------------------------

[2006-11-14 03:56:24] rherror404 at gmail dot com

Is the mail() function sufficiently thread-safe under the Windows MPM
(for Apache)?  I have to wonder if the two concurrent threads are
stepping on each other in their efforts to talk to the SMTP box.

------------------------------------------------------------------------

[2006-11-14 03:51:51] rherror404 at gmail dot com

To clarify, the bash snippet should read like this (see below).  Line
14 contains the call to mail().
========================================
$ (curl "http://192.168.1.2/error.php"; &); (curl
"http://192.168.1.2/error.php"; &)

$ 
Warning: mail(): SMTP server response: 503 5.0.0 foo.bar.com Duplicate
HELO/EHLO in C:\Program Files\Apache Group\Apache2\htdocs\error.php on
line 14
FALSE

Warning: mail(): Failed to Receive in C:\Program Files\Apache
Group\Apache2\htdocs\error.php on line 14
FALSE

$

------------------------------------------------------------------------

[2006-11-13 23:33:06] rherror404 at gmail dot com

s/on line 107/on line 14/g

------------------------------------------------------------------------

[2006-11-13 23:31:26] rherror404 at gmail dot com

Description:
------------
Hitting this script with two concurrent requests causes a failure of
both, each reporting different errors.

$ (curl "http://192.168.1.2/error.php"; &); (curl
"http://192.168.1.2/error.php"; &)

$ 
Warning: mail(): SMTP server response: 503 5.0.0 foo.bar.com Duplicate
HELO/EHLO in C:\Program Files\Apache Group\Apache2\htdocs\error.php on
line 107
FALSE

Warning: mail(): Failed to Receive in C:\Program Files\Apache
Group\Apache2\htdocs\error.php on line 107
FALSE

$ 

Reproduce code:
---------------
<?
define('EXTRAHEADERS', "MIME-Version: 1.0\r\nContent-type: text/html;
charset=iso-8859-1\r\nX-Mailer: PHP\r\n");
define('MAILMSG',
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">
<html><head><title>foo</title><style type='text/css'>
body {margin: 0; font-size: 10pt; font-family: sans-serif, arial;
color: #000000; background-color: #ffffff;}
</style></head><body><div style='font-size: 12pt; background-color:
#ffff00;'>" . date("Y-m-d H:i:s") . "</div>
random junk<br />" .
str_repeat("afhlkhsad;lfj;lkjsa;lfjasd;lkjf;lkjsad;lkfjsad;lkfjsad;lkfjasd;lfkjasd;lkfjsa;ldf<br
/>\n", 100) .
"</body></html>");
ini_set('html_errors', FALSE);
ini_set('SMTP', '10.1.2.3'); // valid address for a SMTP relay
ini_set('sendmail_from', 'foo <[EMAIL PROTECTED]>'); // fake
address
define('MAILTO', '[EMAIL PROTECTED]'); // something real
$retval = mail(MAILTO, 'foo', MAILMSG, EXTRAHEADERS);
echo ( $retval ? 'TRUE' : 'FALSE' ). "\n\n\n";
exit();
?>

Expected result:
----------------
If I run multiple concurrent requests, then I expect to get multiple
emails, one for each request.

Actual result:
--------------
The little shell command where I run two HTTP requests (using cURL in a
Cygwin bash) concurrently causes a failure of both, each reporting
different errors.  It runs fine otherwise.


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=39507&edit=1

Reply via email to