in reply to Mail::Sender question

Use error checking to your advantage. The 'size=0' in log makes me wonder if the file open succeeds:

open(BODY_FILE, $body_file) or die "Can't open $body_file: $!";

Mail::Sender also provides error codes.

if (!(ref($sender) and ($sender < 0)) { die "Sender error: $sender, $Mail::Sender::Error!\n"; }
Otherwise, things look reasonably correct.