If you are willing to look past the warnings in the MIME::Lite documentation, MIME::Lite::HTML will read an HTML file, get/include the images, and transform the src attributes automatically. From documentation:
- Get the file (LWP) if needed
- Parse page to find include images (gif, jpg, flash)
- Attach them to mail with adequat header if asked (default)
- Replace relative url with absolute one
- Build the final MIME-Lite object with each part found
I've usually paired it with HTML::FormatText::WithLinks to generate a text version as well
Update: Looks like Email::MIME::CreateHTML is a modern replacement.