Email::Simple::Markdown - simple email creation with auto text and html multipart body


version 0.7.3


    use Email::Simple::Markdown;

    my $email = Email::Simple::Markdown->create(
        header => [
            From    => '',
            To      => '',
            Subject => q{Here's a multipart email},
        body => '[this]( is *amazing*',

    print $email->as_string;


Email::Simple::Markdown behaves almost exactly like Email::Simple, excepts for one detail: when its method as_string() is invoked, the returned string representation of the email has multipart body with a text/plain element (the original body), and a text/html element, the markdown rendering of the text body.

The markdown convertion is done using Text::MultiMarkdown.


Email::Simple::Markdown inherits all the methods if Email::Simple. In addition, it provides one more method: with_markdown.

create( ... )

Behaves like Email::Simple's create(), but accepts the following additional arguments:

markdown_engine => $module

See markdown_engine_set. If not given, defaults to auto.

css => $stylesheet

If provided, the html part of the email will be prepended with the given stylesheet, wrapped by a css tag.

pre_markdown_filter => sub { ... }

See pre_markdown_filter_set.

charset => $charset

The character set supplied to Email::MIME::create(). By default, no character set is passed.


Returns the markdown engine used by the object.

markdown_engine_set( $module )

Sets the markdown engine to be used by the object. Accepts auto, Text::MultiMarkdown, Text::Markdown, or any module implementing a markdown method.

If not specified or set to auto, the object will use the first markdown module it finds between Text::MultiMarkdown and Text::Markdown.


Returns the cascading stylesheet that is applied to the html part of the email.

css_set( $stylesheet )

Sets the cascading stylesheet for the html part of the email to be $stylesheet.

    $email->css_set( <<'END_CSS' );
        p   { color: red; }
        pre { border-style: dotted; }

The $stylesheet can also be an array ref, holding key/value pairs where the key is the css selector and the value the attached style. For example, the equivalent call to the one given above would be:

        p   => 'color: red;',
        pre => 'border-style: dotted;',

pre_markdown_filter_set( sub{ ... } );

Sets a filter to be run on the body before the markdown transformation is done. The body will be passed as $_ and should be modified in-place.

E.g., to add a header to the email:

    $mail->pre_markdown_filter_set(sub {
        s#^#<div id="header">My Corp <img src='..' /></div>#;

charset_set( $charset )

Sets the charset to be used by the email.


Returns an Email::Abstract representation of the email, with its multipart body.


Yanick Champoux <>


This software is copyright (c) 2022, 2017, 2014, 2013, 2012 by Yanick Champoux.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.