From:             jurgen at person dot be
Operating system: FreeBSD
PHP version:      5.0.2
PHP Bug Type:     Mail related
Bug description:  mail() keeps script running however initiates mailwrapper

Description:
------------
I have a problem with the PHP mail() function on a running Qmail server
on FreeBSD 5.2.1.  Pretty like this problem, I found in the mail archive :

http://lists.freebsd.org/pipermail/freebsd-questions/2003-August/017231.html

Would You PLEASE set the solution somewhere on the php.net documentation,
because 
this problem returns very often.  I knew once the solution, but I forgot
to take
notes.

OS                       : FreeBSD 5.2.1
Mailserver: Qmail
PHP       : 5.0.2 (4.3.9 same error)

Step 1: Testing of the qmail server in shell:

I create a test.eml file with:
<snip>
Message-ID: <[EMAIL PROTECTED]>
Date: Wed, 27 Oct 2004 11:00:37 +0200
From: me <[EMAIL PROTECTED]>
To: [EMAIL PROTECTED]
Subject: Local test
 
Helleuu.
</snip>

I test the mailserver from shell with:
cat test.eml | /var/qmail/bin/qmail-inject      (mail arrives)
cat test.eml | /usr/sbin/sendmail -t -i                 (mail arrives)
mail -s "test" [EMAIL PROTECTED] < test.eml       (mail arrives)

Step 2: I deinstalled the whole bunch of PHP 4.3.9 with:
pkg_delete -x "php4*"
pkg_delete -x "pecl-*"
rm -d -r /usr/local/lib/php /usr/local/include/php

Step 3: Install minimum PHP system.

cd /usr/ports/lang/php5
make WITH_APACHE=yes PHP_SAPI=full
make WITH_APACHE=yes  PHP_SAPI=full install

Step 4: Configure right php.ini and verify it works

cp /usr/local/etc/php.ini-dist /usr/local/etc/php.ini

Change 
;sendmail_path
into
sendmail_path = /var/qmail/bin/qmail-inject

(note: same behaviour when i use, or I use ; before sendmail)
sendmail_path = /usr/sbin/sendmail -t -i 

qmail-inject can be accessed and executed from others.

Write a test.php with
<?
        phpinfo();
?>

# php -v
PHP 5.0.2 (cli) (built: Oct 31 2004 11:12:24) (DEBUG)
Copyright (c) 1997-2004 The PHP Group
Zend Engine v2.0.2, Copyright (c) 1998-2004 Zend Technologies

(Ok next time i try WITH_DEBUG=no)

#php -m
[PHP Modules]
libxml
SPL
Standard

#php -f test.php | grep sendmail_path
sendmail_path => /var/qmail/bin/qmail-inject =>
/var/qmail/bin/qmail-inject

(Ok, seems OK)

Step 5: testing mail from PHP

A simple test2.php:
<? mail("[EMAIL PROTECTED]", "Subjet", "Test mail"); ?>

#php -f test2.php

->Same results, the script sits waiting/running whatever.
No core dumped, it just runs and waits...

Step 6: Let the script run and try another session

ps -aux and i have this:

(using mailwrapper)
root        8803  0.0  0.9  6152 3440  p0  I+    4:44PM   0:00.17 php -f
test2.php
root        8804  0.0  0.1   908  332  p0  I+    4:44PM   0:00.02 sh -c
/usr/sbin/sendmail -t -i
root        8805  0.0  0.2  1256  584  p0  I+    4:44PM   0:00.08
bin/qmail-inject -H --
qmailq      8806  0.0  0.1  1224  512  p0  I+    4:44PM   0:00.04
bin/qmail-queue

So the script initiates the wrapper; qmail-inject and qmail-queue)

(using qmailinject directly from php.ini)
root        8962  0.0  0.9  6152 3440  p1  I+    5:00PM   0:00.16 php -f
testmail.php
root        8963  0.0  0.1   908  332  p1  I+    5:00PM   0:00.02 sh -c
/var/qmail/bin/qmail-inject
root        8964  0.0  0.2  1256  584  p1  I+    5:00PM   0:00.03
/var/qmail/bin/qmail-inject
qmailq      8965  0.0  0.1  1224  512  p1  I+    5:00PM   0:00.03
bin/qmail-queue

In this case the script initiates qmail-inject directly and qmail-queue)

But why does it stucks, waits and the phpscript keeps running ? 

Step 7: Use qmail-inject directly with printout to screen option

Change php.ini with 
sendmail_path = /var/qmail/bin/qmail-inject -H -n


#php -f test2.php
Return-Path: <my-mail>
Date: 31 Oct 2004 16:59:51 -0000
Message-ID: <[EMAIL PROTECTED]>
From: mymail
To: [EMAIL PROTECTED]
Subject: Subjet


 
Test mail

(and the script does NOT return to the promp)

Step 8: Verify what's going on with qmail-stat in a seconday shell

#/var/qmail/bin/qmail-qstat
messages in queue: 4

--> when the script is started it is raised  +1
--> when teh script is stopped it is lowered -1

So the mail get stucks into the queue and refuse to be processed further.
What to do ?!

Expected result:
----------------
The mail() function should handle more deeple the mail process.  We looked
to phpmailer.sourceforge.net  Maybe this would be a better solution to
invake it owns SMTP protocol.
Or maybe it should be used as extension.

Anyway mail() should never hang/deadloop a script, running from the
prompt.  It should catch the reason why it does not succeed.

So I think it's related to the communication between mail() and the
mailserver, because the mail() sits to wait for 'something' before it
continues it scripts.  Maybe the pipe is broken, the handle is closed. 
But I would known the reason, because this event returns, and returns on
questions and should be made public on the documentation.

Actual result:
--------------
How do You do backtracing from shellprompt ?!

-- 
Edit bug report at http://bugs.php.net/?id=30647&edit=1
-- 
Try a CVS snapshot (php4):   http://bugs.php.net/fix.php?id=30647&r=trysnapshot4
Try a CVS snapshot (php5.0): http://bugs.php.net/fix.php?id=30647&r=trysnapshot50
Try a CVS snapshot (php5.1): http://bugs.php.net/fix.php?id=30647&r=trysnapshot51
Fixed in CVS:                http://bugs.php.net/fix.php?id=30647&r=fixedcvs
Fixed in release:            http://bugs.php.net/fix.php?id=30647&r=alreadyfixed
Need backtrace:              http://bugs.php.net/fix.php?id=30647&r=needtrace
Need Reproduce Script:       http://bugs.php.net/fix.php?id=30647&r=needscript
Try newer version:           http://bugs.php.net/fix.php?id=30647&r=oldversion
Not developer issue:         http://bugs.php.net/fix.php?id=30647&r=support
Expected behavior:           http://bugs.php.net/fix.php?id=30647&r=notwrong
Not enough info:             http://bugs.php.net/fix.php?id=30647&r=notenoughinfo
Submitted twice:             http://bugs.php.net/fix.php?id=30647&r=submittedtwice
register_globals:            http://bugs.php.net/fix.php?id=30647&r=globals
PHP 3 support discontinued:  http://bugs.php.net/fix.php?id=30647&r=php3
Daylight Savings:            http://bugs.php.net/fix.php?id=30647&r=dst
IIS Stability:               http://bugs.php.net/fix.php?id=30647&r=isapi
Install GNU Sed:             http://bugs.php.net/fix.php?id=30647&r=gnused
Floating point limitations:  http://bugs.php.net/fix.php?id=30647&r=float
MySQL Configuration Error:   http://bugs.php.net/fix.php?id=30647&r=mysqlcfg

Reply via email to