X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=Email.pm;h=c36472790195a470f81b0070c97032fe07272172;hb=acbb02e2775fc3eb0f69c1ee5da9002a4b5dc607;hp=54f2c50b2102348386309515ad71e43599c8094c;hpb=95b3de58e21a7d978bc17b66632f873636978cb3;p=catagits%2FCatalyst-Plugin-Email.git diff --git a/Email.pm b/Email.pm index 54f2c50..c364727 100644 --- a/Email.pm +++ b/Email.pm @@ -4,8 +4,9 @@ use strict; use Email::Send; use Email::MIME; use Email::MIME::Creator; +use Carp qw/croak/; -our $VERSION = '0.05'; +our $VERSION = '0.07'; =head1 NAME @@ -30,37 +31,119 @@ Catalyst::Plugin::Email - Send emails with Catalyst Send emails with Catalyst and L and L. +=head1 CONFIGURATION + +C accepts the same options as L. + +To send using the system's C program, set C like so: + + __PACKAGE__->config->{email} = ['Sendmail']; + +To send using authenticated SMTP: + + __PACKAGE__->config->{email} = [ + 'SMTP', + 'smtp.myhost.com', + username => $USERNAME, + password => $PASSWORD, + ]; + +For different methods of sending emails, and appropriate C options, +see L, L, L and +L. + +=head1 METHODS + +=head2 email + +C accepts the same arguments as L's +C. + + $c->email( + header => [ + To => 'me@localhost', + Subject => 'A TT Email', + ], + body => $c->subreq( '/render_email' ), + ); + +To send a multipart message, include a C argument containing an +arrayref of Email::MIME objects. + + my @parts = ( + Email::MIME->create( + attributes => { + content_type => 'application/pdf', + encoding => 'quoted-printable', + name => 'report.pdf', + }, + body => $FILE_DATA, + ), + Email::MIME->create( + attributes => { + content_type => 'text/plain', + disposition => 'attachment', + charset => 'US-ASCII', + }, + body => $c->subreq( '/render_email' ), + ), + ); + + $c->email( + header => [ + To => 'me@localhost', + Subject => 'A TT Email', + ], + parts => \@parts, + ); + +=cut + +sub email { + my $c = shift; + my $email = $_[1] ? {@_} : $_[0]; + $email = Email::MIME->create(%$email); + my $args = $c->config->{email} || []; + my @args = @{$args}; + my $class; + unless ( $class = shift @args ) { + $class = 'SMTP'; + unshift @args, 'localhost'; + } + send $class => $email, @args; +} + =head1 USING WITH A VIEW A common practice is to handle emails using the same template language used -for HTML pages. This can be accomplished by pairing this plugin with -L. - -Here is a short example of rendering an email from a Template Toolkit source -file. The call to $c->subreq makes an internal call to the render_email -method just like an external call from a browser. The request will pass -through the end method to be processed by your View class. +for HTML pages. If your view supports the 'render' method (Like the TT view +does), you just set the body like this: + $c->email( + header => [ + To => 'me@localhost', + Subject => 'A TT Email', + ], + body => $c->view('TT')->render($c,'mytemplate.tt'), + } + +If your view doesn't support render, you can just forward to it, then reset +the body like this: sub send_email : Local { my ( $self, $c ) = @_; - + { + local $c->stash->{names} = [ qw/andyg sri mst/ ], + local $c->stash->{template}= 'mytemplate.tt'; + $c->forward($c->view('MyView')); $c->email( header => [ To => 'me@localhost', Subject => 'A TT Email', ], - body => $c->subreq( '/render_email' ), - ); - # redirect or display a message - } - - sub render_email : Local { - my ( $self, $c ) = @_; - - $c->stash( - names => [ qw/andyg sri mst/ ], - template => 'email.tt', + body => $c->res->body, ); + $c->res->body(undef); + } } And the template: @@ -83,26 +166,6 @@ Output: Regards, Us -=head1 METHODS - -=head2 email - -=cut - -sub email { - my $c = shift; - my $email = $_[1] ? {@_} : $_[0]; - $email = Email::MIME->create(%$email); - my $args = $c->config->{email} || []; - my @args = @{$args}; - my $class; - unless ( $class = shift @args ) { - $class = 'SMTP'; - unshift @args, 'localhost'; - } - send $class => $email, @args; -} - =head1 SEE ALSO L, L, L, @@ -111,6 +174,9 @@ L =head1 AUTHOR Sebastian Riedel, C +Andy Grundman +Carl Franks +Marcus Ramberg C =head1 COPYRIGHT