I've written a system called Uniform that does all that and a lot more. You define a form using xml, including things like a directory to upload files to, an email to send out, multiple file uploads, database stuff (it can handle cross referenced tables, and loads more), and the system does the rest.
But its sort of copyrighted to the company I work for. Which is a bit of a bugger. Its also very lacking in documentation.
Seriously though, what you're after isn't that big a challenge. You could write a basic form processor in a couple of weekends.