NAME
Catalyst::View::Email - Send Email from Catalyst
SYNOPSIS
This module simply sends out email from a stash key specified in the configuration settings.
CONFIGURATION
Use the helper to create your View:
$ script/myapp_create.pl view Email Email
In your app configuration (example in YAML):
View::Email:
# Where to look in the stash for the email information.
# 'email' is the default, so you don't have to specify it.
stash_key: email
# Define the defaults for the mail
default:
# Defines the default content type (mime type).
# mandatory
content_type: text/plain
# Defines the default charset for every MIME part with the content
# type text.
# According to RFC2049 a MIME part without a charset should
# be treated as US-ASCII by the mail client.
# If the charset is not set it won't be set for all MIME parts
# without an overridden one.
# Default: none
charset: utf-8
# Setup how to send the email
# all those options are passed directly to Email::Send
sender:
mailer: SMTP
# mailer_args is passed directly into Email::Send
mailer_args:
Host: smtp.example.com # defaults to localhost
username: username
password: password
NOTE ON SMTP
If you use SMTP and don't specify Host, it will default to localhost and attempt delivery. This often times means an email will sit in a queue somewhere and not be delivered.
SENDING EMAIL
In your controller, simply forward to the view after populating the stash_key
sub controller : Private {
my ( $self, $c ) = @_;
$c->stash->{email} = {
to => q{catalyst@rocksyoursocks.com},
cc => q{foo@bar.com},
bcc => q{hidden@secret.com},
from => q{no-reply@socksthatarerocked.com},
subject => qq{Your Subject Here},
body => qq{Body Body Body}
};
$c->forward('View::Email');
}
Alternatively, you can use a more raw interface, and specify the headers as an array reference.
$c->stash->{email} = {
header => [
To => 'foo@bar.com',
Subject => 'Note the capitalization differences'
],
body => qq{Ain't got no body, and nobody cares.},
# Or, send parts
parts => [
Email::MIME->create(
attributes => {
content_type => 'text/plain',
disposition => 'attachment',
charset => 'US-ASCII',
},
body => qq{Got a body, but didn't get ahead.}
)
],
};
HANDLING FAILURES
If the email fails to send, the view will die (throw an exception). After your forward to the view, it is a good idea to check for errors:
$c->forward('View::Email');
if ( scalar( @{ $c->error } ) ) {
$c->error(0); # Reset the error condition if you need to
$c->res->body('Oh noes!');
} else {
$c->res->body('Email sent A-OK! (At least as far as we can tell)');
}
USING TEMPLATES FOR EMAIL
Now, it's no fun to just send out email using plain strings. Take a look at Catalyst::View::Email::Template to see how you can use your favourite template engine to render the mail body.
SEE ALSO
Catalyst::View::Email::Template - Send fancy template emails with Cat
Catalyst::Manual - The Catalyst Manual
Catalyst::Manual::Cookbook - The Catalyst Cookbook
AUTHORS
J. Shirley <jshirley@gmail.com>
CONTRIBUTORS
(Thanks!)
Matt S Trout
Daniel Westermann-Clark
Simon Elliott <cpan@browsing.co.uk>
Roman Filippov
Alexander Hartmaier <alex_hartmaier@hotmail.com>
LICENSE
This library is free software, you can redistribute it and/or modify it under the same terms as Perl itself.