For sending email I can recommend Mail::Sender. But you need a smtp-server to send it. It doesn't matter, whether this smtp-server is on your server or on an other server.
Mail::Sender also provides auth-methods.
To validate an email-address you should use Mail::RFC822::Address or any suitable module.