Add mmm.pl
Signed-off-by: Thomas Hochstein <thh@inter.net>
This commit is contained in:
parent
8b47885dbe
commit
afd4787570
|
@ -13,3 +13,12 @@ to the format of the Wordpress plugin
|
||||||
|
|
||||||
Usage: `footnotes --to mmd|wp [--file $inputfile]`
|
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]`
|
||||||
|
|
101
mmm/mmm.pl
Normal file
101
mmm/mmm.pl
Normal file
|
@ -0,0 +1,101 @@
|
||||||
|
#! /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);
|
||||||
|
};
|
Loading…
Reference in a new issue