|laziness, impatience, and hubris|
While I still stick the comment above I will take ssome stabs at why this fails for the sake of learning...
A few things that I notice while looking at RFC 821 This line:
print $sock "RCPT FROM: $mail_to <$mail_to>\n"; Should be:
Also the RFC states that the quit should be followed by cr+LF which would change
Anyway those are a few things I noticed off the top of my head, also you should issue a QUIT before you close even if there is an error in an earlier step.
My advice in general is to not reivnvent the wheel use the SMTP module that already implements this correctly. Failing that take the time to read the RFC(s) and implement it they way it is stated.