1. If you just want to send HTML email (and accept that some clients will not like this at all), you can turn your mail into an html page by stating:
Content-type: text/html
In you mail header.
2. If you want to be more compatible, you might compose an email with different attachments using MIME::Lite - it is (IMHO) the easiest to use module for creating complex messages.
3. You could also make a CGI script that sits on a short url, gets an id and refers to the longer url, eliminating the need for HTML :-)