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.