You might check out Net::Cmd. It handles
most of the details of an "SMTP like" protocol.
in reply to creating a state machine
Other modules, like Net::SMTP, Net::SNPP, and Net::FTP derive
Those are all, of course, client oriented modules,
so none it really helps with your state-machine,
but it would help with the line-oriented protocol.
If POE isn't your cup of tea, you might like
Net::Server. Similarly named, but
unrelated is NetServer::SMTP which shows
how to use Net::Cmd within a state-machine type