I'm not sure what you think you're going to accomplish by sending a MAIL FROM: before the connect banner arrives. Before sending a MAIL FROM, you generally need to:
- receive the connect banner
- send a HELO or EHLO
- receive a successful (2xx) response to the HELO/EHLO command
Otherwise, most SMTP servers will consider you to be either a broken client (and just disconnect) or a spammer (and take whatever measures they deem appropriate, such as blacklisting you, reporting your IP to an RBL maintainer, etc).
I suppose if you're testing a filtering product, sending MAIL FROM immediately does make sense. In that case you probably want to throw as much test data, both RFC-conformant and non-conformant, as you can think of.
The place for you to start looking is IO::Socket::INET. Once you've generated your socket, do something like $sock->send("MAIL FROM:<spammer@somedomain.tld>"), and call $sock->recv to get your result.
You might also want to look at the guts of Net::SMTP to get some ideas.