PHP SMTP server using sockets: connection refused
In one of my personal project I am developing a basic SMTP server in php. It's ready and working when I launch it on its own from the command line; I access it correctly through telnet and it is responding correctly to SMTP commands and I access it correctly also from a php script sending an email using this se开发者_运维知识库rver.
Now I have an issue when I launch the server from a php script and not from the command line (I do it using exec
function). The server is responding correctly when I access it through telnet but not anymore from a php script sending an email.
Could anyone help me?
Note
To send emails from php scripts I use Mail PEAR extension. When I launch the server from within a script and try to send an email in the same process I get this error:
SMTP: Failed to connect socket: Connection refused (code: -1, response: )
Summary
My server implementation is in server.php
and the script sending an email is in mail-test.php
.
1) If I launch the server on the command line this way: php server.php
and then launch php mail-test.php
the script is processed normally and the email is sent. I can also access the server via telnet 127.0.0.1 3535
and communicating with the server normally.
2) Using an another script called test.php
I wanted to wrap the server management, launching the server via exec("php server.php > /dev/null 2>&1 &");
and then doing the mail sending from that script in one shot. Doing that way, the server is correctly launched (I can access it via telnet
) but emails sent from test.php
thus after the server launch raise an error. If I send emails from an another script before killing the test.php
process the email is correctly sent however...
I hope I am enough explicit.
Strangely, I resolved this issue by setting SO_RCVTIMEO
this way:
socket_set_option($sock, SOL_SOCKET, SO_RCVTIMEO, array('sec' => 0, 'usec' => 500))
The error message I got was not really meaningful.
I hope that it help others facing similar issue.
Now I have an issue when I launch the server from a php script and not from the command line (I do it using exec function). The server is responding correctly when I access it through telnet but not anymore from a php script sending an email.
It's impossible to tell. Maybe there are different configuration php.ini
(though I'm not sure what could influence this) files, maybe the PHP executable you're calling is another one (check the PATH
environment variable in both cases)...
Try running netstat
to check if there any differences in the listening socket.
精彩评论