#!/usr/bin/perl -w
# Requires the following to be installed:
# File::Path
# File::Spec
# IO::Scalar, ... from the IO-stringy distribution
# MIME::Base64
# MIME::QuotedPrint
# Net::SMTP
# Mail::Internet, ... from the MailTools distribution.
# MIME::Tools
use strict;
use Archive::Zip qw(:CONSTANTS :ERROR_CODES);
use IO::Scalar;
use MIME::Entity; # part of MIME::Tools package
my $zipContents = '';
my $SH = IO::Scalar->new(\$zipContents);
my $zip = Archive::Zip->new();
my $member;
# add a string as a member:
my $stringMember = '
Testing
';
$member = $zip->addString($stringMember, 'whatever.html');
# $member->desiredCompressionMethod(COMPRESSION_STORED);
# write it to the scalar
my $status = $zip->writeToFileHandle($SH);
$SH->close;
print STDERR "zip is " . length($zipContents) . " bytes long\n";
### Create an entity:
my $top = MIME::Entity->build(
Type => 'multipart/mixed',
From => 'ned@bike-nomad.com',
To => 'billnevin@tricom.net',
Subject => "Your zip",
);
# attach the message
$top->attach(
Encoding => '7bit',
Data => "here is the zip you ordered\n"
);
# attach the zip
$top->attach(
Data => \$zipContents,
Type => "application/x-zip",
Encoding => "base64",
Disposition => 'attachment',
Filename => 'your.zip'
);
# attach this code
$top->attach(
Encoding => '8bit',
Type => 'text/plain',
Path => $0,
# Data => 'whatever',
Disposition => 'inline'
);
# and print it out to stdout
$top->print(\*STDOUT);