I was having the same issue: two copies of the text within the email, one as plain text and one as HTML, as well as an attachment. (using MIME::Lite::TT: HTML.) Posting my very simple solution here after much struggle:

I removed the line

$msg->attr("conten t-type" => "multipart/mixed");

Bam, problem solved, it only shows one version of the text.