Depending upon the business requirements and the way that the data is received into the system, a real-time address processing solution may be the best bet.If a real-time solution is required, you will want to consider the license agreement and technical limitations of the Google Maps/Bing/Yahoo APIs.
It has bindings for C and Java (and we created a Perl binding).
Email Checker is a simple tool for verifying an email address. It extracts the MX records from the email address and connect to mail server (over SMTP and also simulates sending a message) to make sure the mailbox really exist for that user/address.
Then it tells you whether the email address is real or not.
There is a Perl module Geo:: Postal Address, but it uses heuristics and doesn't have the other features mentioned for Geo Stan.
Edit: some have mentioned 'doing it yourself', if you do decide to do this, a good source of information to start with is the US Census Tiger Data Set, which contains a lot of information about the US including address information.