I always use Mail::Sendmail for the purpose of
sending mail. Easy to use, works great.
As far as generating the HTML, for this you can
probably just embed entire web pages into heredocs,
so that your
web pages are *almost* static, but then you can just
interpolate any particulars you need. That technique
will not be adequate for more complicated purposes,
when the page needs to be more fully dynamic, but
here you've basically only got two or three pages: a
form for the user to fill in, a "sent" message, and
possibly a "failed" message. They don't need to
change much, other than (say) interpolating an
error message.
Update: Be sure to hardcode the To: address, so
that spammers can't abuse your script to send to
arbitrary recipients.