Красотища!
Дмитрий Котеров 12.04.2004 15:02
Мне очень понравился код: строгий, красивый, аккуратный. Вот бы все так писали...
Есть несколько моментов, которые не очень хороши для Денвера, но я надеюсь все-таки с этим как-нибудь разобраться.
1. В базовом пакете Денвера-3 используется miniperl вместо ActivePerl-а - это урезанный вариант perl без модулей, предназначенный только для того, чтобы работать в качестве интерпретатора инсталляторов. Там большая беда по части fork-а. Это все направлено на то, чтобы уменьшить размер дистрибутива.
2. Придется засунуть в дистрибутив все модули, которые нужны данному скрипту (включая IO::Socket), а также модули, которые используют те модули, и т.д. Это увеличит дистрибутив.
Я думаю, обе эти проблемы удастся обойти. Поддержку fork() можно включить (правда, она все равно будет кривая и добавит пару десятков килобайт в дистрибутив), а IO::Socket заменить обычными вызовами socket, bind, accept и т.д. (а еще лучше - написать мини-IO::Socket, в котором будет все сильно урезано, но для данного скрипта хватит). Идеально было бы, если скрипт запускался ВООБЩЕ без всяких модулей, чтобы ему был нужен только perl.exe, и все.
Александр, потенциально Вы разрешаете использовать данный скрипт в Денвере-3 (после моих доработок, которые я описал выше - конечно, если Вы не захотите сами их сделать :-)? Естественно, с сохранением копирайтов и авторства.
У меня есть еще одна идея эмлятора SMTP, не касающаяся данного скрипта. Можно ведь вообще не реализовывать диалог, а просто переадресовать подключение к нужному хосту в Интернете. То есть, при получении RCPT TO распарсить email, выдрать хост, получить его MX-записи и попытаться к ним по очереди приконнектиться, а как только это удастся, просто перенаправлять данные из локального сокета в удаленный. Дешево и сердито.
Тут еще дело в том, что на форуме раз 10 уже спрашивали, как ОТКЛЮЧИТЬ sendmail-заглушку в PHP. Народ хочет письма слать наружу, а не скрипты отлаживать. (-: