http://www.perlmonks.org?node_id=185923

frankus has asked for the wisdom of the Perl Monks concerning the following question:

Due to constraints I've had to roll my own attachment doohicky for Mail::SendMail.
It takes a hash of "filenames" and "contents",
the original script it's taken from here handles files using a binary read of files to be attached.
Here seems to be the problem, the encoding for the files seems to be duff, using quotable text,
I'm sending an XML attachment.

My code generates strings, I'm loathe to print them to a file and read them back using binmode,
can I use 'pack' or 'vec' or is there a different content type I can use?

use Mail::Sendmail; sub attach { my $f = shift; my $boundary = "====" . time() . "===="; $f->{body} = encode_qp( $f->{message} ); $f->{from} = 'test@thesite.org'; delete($f->{message}); $f->{'content-type'} = "multipart/mixed; boundary=\"$boundary\""; $boundary = '--'.$boundary; $f->{body} = <<HEAD; $boundary Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable $f->{body} HEAD while ( my($file,$data) = each %{$f->{attachment}}){ $f->{body} .= <<ATTACH; $boundary Content-Type: application/octet-stream; name="$file" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="$file" $data $boundary-- ATTACH } delete($f->{attachment}); sendmail(%$f); }

--

Brother Frankus.

¤