I've gotten very good use out of the modules Net::POP3 and Mail::Sendmail. I set up programs that test mail servers, and they can send mail to and fetch emails from the target server.
The example at the top of the Net::POP3 documentation shows both fetching and reading email (see the code in the Synopsis).