/usr/share/doc/libmime-tools-perl/examples/mimepostcard is in libmime-tools-perl 5.503-1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | #!/usr/bin/perl -w
=head1 NAME
mimepostcard - send/output a multipart/alternative message
=head1 SYNOPSIS
Usage:
mimepostcard /path/to/some/graphic.jpg to@addr.com
You can point it at a .gif file as well.
The special address "-" just causes the message to go to STDOUT.
=head1 DESCRIPTION
This sends a mesasge both as HTML and plain text.
I use "Data"; you would probably use "Path".
=head1 AUTHOR
Eryq, eryq@zeegee.com
=cut
use MIME::Entity;
use strict;
use Getopt::Std;
$SIG{__DIE__} = sub { die "mime_postcard: $_[0]\n" };
#------------------------------
# usage
#------------------------------
sub usage {
my $problem = join '',@_;
print STDERR "\n";
print STDERR "Error: $problem\n" if $problem;
my @usage;
if (open O, '<'.$0){
local($/) = "\n";
1 while (defined($_ = <O>) and !/^=head1\s+SYNOPSIS/);
push @usage, $_ while (defined($_ = <O>) and !/^=/);
close O;
}
my $u = join '', @usage; $u =~ s/\A\n+//;
$u =~ s{\n\n+(\s+)}{\n$1}g;
print STDERR $u, "\n";
exit -1;
}
#------------------------------
# main
#------------------------------
sub main {
### Get options:
my %opts;
getopts("", \%opts);
### Get graphic:
my $graphic = shift @ARGV || usage "missing path to graphic\n";
(-r $graphic) or die "$graphic unreadable\n";
my $graphic_type;
if ($graphic =~ /\.gif$/i) { $graphic_type = "image/gif" }
elsif ($graphic =~ /\.jpe?g$/i) { $graphic_type = "image/jpeg" }
elsif ($graphic =~ /\.png$/i) { $graphic_type = "image/png" }
else { die "unknown type for: $graphic\n"; }
my $gid = "my-graphic";
### Get destination:
my $dest = shift @ARGV || usage "missing destination\n";
### The top-level message:
my $msg = MIME::Entity->build(To => $dest,
Subject => 'A postcard for you',
Type => 'multipart/alternative');
### Alternative #1 is the plain text:
my $plain = $msg->attach(Type => 'text/plain',
Data => ["Having a wonderful time... \n",
"wish you were looking at HTML \n",
"instead of this boring text!\n"]);
### Alternative #2 is the HTML-with-content:
my $fancy = $msg->attach(Type => 'multipart/related');
$fancy->attach(Type => 'text/html',
Data => [qq< <H1>Hey there!</H1> \n>,
qq< Having a <I>wonderful</I> time... \n>,
qq< take a look!\n >,
qq< <BR><IMG SRC="cid:$gid" ALT="Snapshot"><HR>>
]);
$fancy->attach(Type => $graphic_type,
Path => $graphic,
Id => $gid);
### Print or send:
if ($dest eq '-') {
$msg->print;
}
else {
$msg->smtpsend();
}
}
eval { main() }; die "$0: $@" if $@;
|