Usage: `footnotes --to mmd|wp [--file $inputfile]`
+### mmm.pl
+
+`mmm` (*MIME multipart/alternative from Markdown*) can
+create a MIME `multipart/alternative` mail, containing a
+`text/plain` part (in Markdowen) and a `text/html` part, from
+a Markdown file. Other mail headers (From:, To:, Subject:, ...)
+can be prepended from a template file.
+
+Usage: `mmm [--file $inputfile] [--headers $templatefile]`
--- /dev/null
+#! /usr/bin/perl -W
+#
+# mmm Version 0.1 by Thomas Hochstein
+#
+# Create a MIME multipart/alternative part, containing
+# text/plain (in Markdowen) and text/html, from a
+# Markdown file.
+#
+# Copyright (c) 2015 Thomas Hochstein <thh@inter.net>
+#
+# It can be redistributed and/or modified under the same terms under
+# which Perl itself is published.
+
+my $VERSION = "0.1";
+
+use strict;
+use Getopt::Long qw(GetOptions);
+use Text::Markdown;
+
+# read commandline option(s)
+my ($OptInFile,$OptHeaderFile);
+GetOptions ('f|file=s' => \$OptInFile,
+ 't|headers=s' => \$OptHeaderFile,
+ 'H|help' => \&ShowPOD,
+ 'V|version' => \&ShowVersion) or exit 1;
+
+# read input from STDIN or --file
+# unset $/
+undef $/;
+my $markdown;
+if ($OptInFile) {
+ open(FILE, "< $OptInFile") or die "Can't open $OptInFile: $!";
+ $markdown = <FILE>;
+ close(FILE);
+} else {
+ $markdown = <>;
+}
+# read header template
+my $headers;
+if ($OptHeaderFile) {
+ open(HEADERS, "< $OptHeaderFile") or die "Can't open $OptHeaderFile: $!";
+ $headers = <HEADERS>;
+ close(HEADERS);
+ # remove all trailing newlines
+ $headers =~ s/\n+$//;
+}
+# reset $/
+$/ = "\n";
+
+# convert markdown to html
+my $html = Text::Markdown::Markdown($markdown);
+
+# output
+print "$headers\n" if ($OptHeaderFile);
+
+my $Boundary = &GenBoundary;
+print "MIME-Version: 1.0\n";
+print "Content-Type: multipart/alternative;\n";
+printf ('boundary="%s"'."\n",$Boundary);
+print "\n";
+
+print "This is a multi-part message in MIME format.\n";
+
+printf ("--%s\n",$Boundary);
+print "Content-Type: text/plain; charset=ISO-8859-15\n";
+print "Content-Transfer-Encoding: 8bit\n";
+print "\n";
+print "$markdown\n";
+
+printf ("--%s\n",$Boundary);
+print "Content-Type: text/html; charset=ISO-8859-15\n";
+print "Content-Transfer-Encoding: 8bit\n";
+print "X-Creator: Markdown/1.0.1\n";
+print "\n";
+print "$html\n";
+
+printf ("--%s--\n",$Boundary);
+
+exit(0);
+
+################################################################################
+
+sub GenBoundary {
+ my $hex;
+ $hex .= sprintf("%x", rand 16) for 1..20;
+ return ( "----------" . $hex);
+}
+
+sub ShowVersion {
+ print "mmm v$VERSION\n";
+ print "MIME multipart/alternative from Markdown - MMM\n";
+ print "Copyright (c) 2014 Thomas Hochstein <thh\@inter.net>\n";
+ print "This program is free software; you may redistribute it ".
+ "and/or modify it under the same terms as Perl itself.\n";
+ exit(100);
+};
+
+sub ShowPOD {
+ exec('perldoc', $0);
+ exit(100);
+};