Template::Plugin::MIME - TemplateToolkit plugin providing a interface to MIME::Entity
Version 0.12
Use this plugin inside a template:
[% USE MIME %] [% cid_of_image = MIME.attach('image.png') %] <img src="cid:[% cid_of_image %]" />
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() .
make_multipart('related')
$entity
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
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:
%options
build
Path is equivalent to $path
Path
$path
Id is the content-id, automatically generated.
Id
Encoding is forced to Base64.
Encoding
Type is the content type (but see below for more information)
Type
Top is 0, since an attachment is not a top-level entity.
Top
All other options are passed through.
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.
checktype_filename
If all fails, the mime-type "application/octet-stream" is used.
David Zurborg, <david at fakenet.eu>
<david at fakenet.eu>
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.
bug-template-plugin-mime at rt.cpan.org
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
http://annocpan.org/dist/Template-Plugin-MIME
CPAN Ratings
http://cpanratings.perl.org/d/Template-Plugin-MIME
Search CPAN
http://search.cpan.org/dist/Template-Plugin-MIME/
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.
To install Template::Plugin::MIME, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Template::Plugin::MIME
CPAN shell
perl -MCPAN -e shell install Template::Plugin::MIME
For more information on module installation, please visit the detailed CPAN module installation guide.