PHP SMTP-сервер с использованием сокетов: соединение отказано - PullRequest
1 голос
/ 10 сентября 2010

В одном из моих личных проектов я разрабатываю базовый SMTP-сервер на php.Он готов и работает, когда я запускаю его самостоятельно из командной строки;Я правильно обращаюсь к нему через telnet, и он корректно реагирует на команды SMTP, и я правильно к нему обращаюсь также из сценария php, отправляющего электронную почту с использованием этого сервера.

Теперь у меня возникает проблема при запуске сервера с phpсценарий, а не из командной строки (я делаю это с помощью функции exec).Сервер правильно отвечает, когда я получаю к нему доступ через telnet, но не с помощью php-скрипта, отправляющего электронное письмо.

Может ли кто-нибудь мне помочь?1011 * Для отправки писем из скриптов php я использую расширение Mail PEAR.Когда я запускаю сервер из скрипта и пытаюсь отправить электронное письмо в том же процессе, я получаю эту ошибку:

SMTP: Failed to connect socket: Connection refused (code: -1, response: )

Сводка

Моя реализация сервера находится в server.php, а сценарий отправки электронной почты - в mail-test.php.

1) Если я запускаю сервер в командной строке следующим образом: php server.php, а затем запускаю php mail-test.php скрипт обрабатывается нормально и электронное письмо отправляется.Я также могу получить доступ к серверу через telnet 127.0.0.1 3535 и нормально общаться с сервером.

2) Используя другой скрипт под названием test.php, я хотел обернуть управление сервером, запустив сервер через exec("php server.php > /dev/null 2>&1 &");, а затемделать отправку почты из этого скрипта в один выстрел.При этом сервер правильно запускается (я могу получить к нему доступ через telnet), но сообщения электронной почты, отправленные с test.php, поэтому после запуска сервера возникает ошибка.Если я отправляю электронные письма из другого сценария, прежде чем убить процесс test.php, электронная почта отправляется правильно ...

Надеюсь, я достаточно откровенен.

Ответы [ 2 ]

1 голос
/ 20 сентября 2010

Странно, я решил эту проблему, установив SO_RCVTIMEO таким образом:

socket_set_option($sock, SOL_SOCKET, SO_RCVTIMEO, array('sec' => 0, 'usec' => 500))

Сообщение об ошибке, которое я получил, не имело никакого смысла.

Я надеюсь, что это поможет другим, сталкивающимся с подобной проблемой.

0 голосов
/ 10 сентября 2010

Теперь у меня есть проблема, когда я запускаю сервер из php-скрипта, а не из командной строки (я делаю это с помощью функции exec). Сервер правильно реагирует, когда я получаю к нему доступ через telnet, но не с помощью php-скрипта, отправляющего электронное письмо.

Невозможно сказать. Возможно, есть другие файлы конфигурации php.ini (хотя я не уверен, что это может повлиять на это), может быть, исполняемый файл PHP - другой (проверьте переменную окружения PATH в обоих случаях) ...

Попробуйте запустить netstat, чтобы проверить, есть ли какие-либо различия в сокете прослушивания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...