in reply to STARTTLS Failure

I'm working from memory, but I think you are supposed to do a TLS/SSL negotiation after sending the STARTTLS command. It should not accept any plaintext after the STARTTLS command, so the remote server seems to be working correctly.

Why not use a module like Net::SMTP to do the heavy lifting for you?