#! /usr/bin/perl -W # # mmm Version 0.2 by Thomas Hochstein # # Create a MIME multipart/alternative part, containing # text/plain (in Markdowen) and text/html, from a # Markdown file. # # Copyright (c) 2015-2016 Thomas Hochstein # # It can be redistributed and/or modified under the same terms under # which Perl itself is published. my $VERSION = "0.2"; 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 = ; close(FILE); } else { $markdown = <>; } # read header template my $headers; if ($OptHeaderFile) { open(HEADERS, "< $OptHeaderFile") or die "Can't open $OptHeaderFile: $!"; $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) 2015 Thomas Hochstein \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); };