NAME
Template::Plugin::MIME - TemplateToolkit plugin providing a interface to MIME::Entity
VERSION
Version 0.12
SYNOPSIS
Use this plugin inside a template:
[% USE MIME %]
[% cid_of_image = MIME.attach('image.png') %]
<img src="cid:[% cid_of_image %]" />
METHODS FOR USE OUTSIDE TEMPLATE
attachments()
Returns all attached files.
use Template;
use Template::Plugin::MIME;
$template = Template->new;
$template->process(...);
$attachments = Template::Plugin::MIME->attachments($template);
merge($template, $mail)
This method merges a MIME::Entity documents together with all attached files in the template.
use Template;
use Template::Plugin::MIME;
use MIME::Entity;
$template = Template->new;
$template->process($infile, $stash, $outfile);
$entity = MIME::Entity->build(
From => ...,
To => ...,
Subject => ...,
Type => 'text/html',
Path => $outfile,
);
Template::Plugin::MIME->merge($template, $entity);
# $entity is now multipart/related
This methods invokes make_multipart('related')
on $entity
an then attaches all party to this entity with add_part()
.
A more complex example is shown below. This can be used when you want seperate attachement dispositions together:
use Template;
use Template::Plugin::MIME;
use MIME::Entity;
$template = Template->new;
$template->process($ttfile, $stash, $outfile);
$inner_text = MIME::Entity->build(
Top => 0, # this is very important!
Type => 'text/plain',
Path => $plainfile,
);
$inner_html = MIME::Entity->build(
Top => 0, # this is very important!
Type => 'text/html',
Path => $outfile,
);
$outer = MIME::Entity->build(
From => ...,
To => ...,
Subject => ...,
Type => 'multipart/alternative',
);
# first, merges the attachments into the html entity:
Template::Plugin::MIME->merge($template, $inner_html);
# $inner_html is now multipart/related
# seconds merges the alternative into the root entity:
$outer->add_part($inner_text);
$outer->add_part($inner_html);
The advantage is, the root entity considers of two alternative: a plain text and a html variant. the html variant is a multipart too, with related content (images, ...) attached.
And a total complex example shows how to use mixed content:
use Template;
use Template::Plugin::MIME;
use MIME::Entity;
$template = Template->new;
$template->process($ttfile, $stash, $outfile);
$inner_text = MIME::Entity->build(
Top => 0, # this is very important!
Type => 'text/plain',
Path => $plainfile,
);
$inner_html = MIME::Entity->build(
Top => 0, # this is very important!
Type => 'text/html',
Path => $outfile,
);
$outer = MIME::Entity->build(
Top => 0, # this is very important!
Type => 'multipart/alternative',
);
$entity = MIME::Entity->build(
From => ...,
To => ...,
Subject => ...,
Type => 'multipart/mixed',
);
# first, merge the attachments into the html entity:
Template::Plugin::MIME->merge($template, $inner_html);
# $inner_html is now multipart/related
# second, merge the alternative into the outer entity:
$outer->add_part($inner_text);
$outer->add_part($inner_html);
# third, merge all parts together the root entity
$entity->add_part($outer);
$entity->add_part(Path => 'invoice.pdf', Type => 'application/pdf', Filename => 'Your Invoice.pdf');
The mime structue is now
(root) multipart/mixed
|-> multipart/alternative
| |-> multipart/related
| | |-> text/html
| | `-> image/png
| `-> text/plain
`-> application/pdf
FUNCTIONS FOR USE INSIDE TEMPLATE
attach($path [, %options] )
This method attaches a file and returns a Content-Id for use within html content, for example.
[% USE MIME %]
[% signature_cid = MIME.attach("signature.png") %]
<img src="cid:[% signature_cid %]" />
The paramhash %options
is equivalent to the build
class/instance method in MIME::Entity. The following options are overridden in order to work with related content:
Path
is equivalent to$path
Id
is the content-id, automatically generated.Encoding
is forced to Base64.Type
is the content type (but see below for more information)Top
is 0, since an attachment is not a top-level entity.
All other options are passed through.
Obtaining Content-Type
If the Options Type
is set, this will be used regardless what the file is really is.
If File::LibMagic is installed on your system, checktype_filename
will be invoked to obtain the mime-type. This method may fail and error messages are discarded for now.
If all fails, the mime-type "application/octet-stream" is used.
AUTHOR
David Zurborg, <david at fakenet.eu>
BUGS
Please report any bugs or feature requests to bug-template-plugin-mime at rt.cpan.org
, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Template-Plugin-MIME. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Template::Plugin::MIME
You can also look for information at:
RT: CPAN's request tracker
http://rt.cpan.org/NoAuth/Bugs.html?Dist=Template-Plugin-MIME
AnnoCPAN: Annotated CPAN documentation
CPAN Ratings
Search CPAN
ACKNOWLEDGEMENTS
COPYRIGHT & LICENSE
Copyright 2013 David Zurborg, all rights reserved.
This program is free software; you can redistribute it and/or modify it under the terms of the ISC license.