I don't see glaringly wrong with it off the top of my head. You might try some things: * Split the 'content_id' value into its own parameter * Let Mail::Sender supply the "boundary" parameter * Employ the 'debug' parameter in the object create call & write a logI've been using Mail::Sender for > 7 yrs & found it quite bullet-proof. I do recall that it was a bitch to get everything working. I use it to send attachments as well as inline images
ref $sender->Attach({description => $description, ctype => 'image/jpeg' , encoding => 'base64' , disposition => sprintf('inline;filename="%s/%s";', $path[$#path - 1], $path[$#path]) , file => $imagepath.$path[$#path] , content_id => $k}) or die "Cannot send file as a separate part of mail message: $Mail::Sender::Error";