Cataly...::Email(3pm)
π Catalyst::View::Email β the send-emails-from-Catalyst era π
okay bestie, so this is Catalyst::View::Email, straight outta the User Contributed Perl Documentation shelf (it's a 3pm page, iykyk) β and it does exactly one iconic thing: it sends emails from your Catalyst app. that's it, that's the vibe. π¦
β¨ NAME β¨
Catalyst::View::Email β Send Email from Catalyst. yes, literally that. it's giving "your app can send mail now". π
β¨ SYNOPSIS β¨
so this module sends out emails from a stash key, and which key that is? that's in your configuration settings. that's the whole deal fr fr. πΈ
β¨ CONFIGURATION β¨
WARNING: since version 0.10 the configuration options slightly changed! not me warning you about a breaking-ish change π pay attention.
Use the helper to create your View:
$ script/myapp_create.pl view Email Email
In your app configuration:
__PACKAGE__->config(
'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::Sender::Simple
sender => {
# if mailer doesn't start with Email::Sender::Simple::Transport::,
# then this is prepended.
mailer => 'SMTP',
# mailer_args is passed directly into Email::Sender::Simple
mailer_args => {
host => 'smtp.example.com', # defaults to localhost
sasl_username => 'sasl_username',
sasl_password => 'sasl_password',
}
}
}
);
a lil breakdown for my girlies, no gatekeeping:
stash_keyβ where in the stash we go looking for the email info.'email'is the default, so honestly you don't even have to write it. optional queen.defaultβ the defaults for your mail.content_typeβ the default content type (mime type). mandatory!! don't skip her.charsetβ the default charset for every MIME part whose content type is text. perRFC2049, a MIME part with no charset should be treated asUS-ASCIIby the mail client. if the charset isn't set, it just won't be set for all the MIME parts that don't have their own overridden one. default: none.
senderβ how to actually send the thing. all those options get passed directly toEmail::Sender::Simple.mailerβ if the mailer doesn't start withEmail::Sender::Simple::Transport::, that gets prepended.mailer_argsβ passed directly intoEmail::Sender::Simple.hostdefaults tolocalhost.
β¨ NOTE ON SMTP β¨
If you use SMTP and don't specify host, it defaults to localhost and it will attempt delivery. and bestie, this often means an email will sit in a queue and not be delivered. the way that it justβ¦ sits there π
β¨ SENDING EMAIL β¨
Sending email is just filling the stash and forwarding to the view. that's it. iconic behavior.
sub controller : Private {
my ( $self, $c ) = @_;
$c->stash->{email} = {
to => 'jshirley@gmail.com',
cc => 'abraxxa@cpan.org',
from => 'no-reply@foobar.com',
subject => 'I am a Catalyst generated email',
body => 'Body Body Body',
};
$c->forward( $c->view('Email') );
}
π the raw interface π
Alternatively you can use a more raw interface and specify the headers as an array reference, exactly like it's passed to Email::MIME::Creator. note that you may also mix both syntaxes if you like ours better but you need to specify additional header attributes. the attributes get appended to the header array reference without overwriting the ones already in there. no clobbering, we don't do that here. π
$c->stash->{email} = {
header => [
To => 'jshirley@gmail.com',
Cc => 'abraxxa@cpan.org',
Bcc => join ',', qw/hidden@secret.com hidden2@foobar.com/,
From => 'no-reply@foobar.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.},
)
],
};
π envelope sender + recipient π
You can set the envelope sender and recipient as well:
$c->stash->{email} = {
envelope_from => 'envelope-from@example.com',
from => 'header-from@example.com',
envelope_to => [ 'foo@example.com', 'bar@example.com' ],
to => 'Undisclosed Recipients:;',
...
};
β¨ HANDLING ERRORS β¨
If the email fails to send, the view will die (throw an exception). so after your forward to the view, it is a good idea to check for errors:
$c->forward( $c->view('Email') );
if ( scalar( @{ $c->error } ) ) {
$c->error(0); # Reset the error condition if you need to
$c->response->body('Oh noes!');
} else {
$c->response->body('Email sent A-OK! (At least as far as we can tell)');
}
"at least as far as we can tell" is such a mood honestly π
β¨ 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. fancy mail era unlocked β¨
β¨ METHODS β¨
newβ Validates the base config and creates theEmail::Sender::Simpleobject for later use byprocess.process($c)β Theprocessmethod does the actual processing when the view is dispatched to. This method sets up the email parts and hands off toEmail::Sender::Simpleto handle the actual email delivery. the main character of methods tbh.setup_attributes($c, $attr)β Merge attributes with the configured defaults. You can override this method to return a structure to pass intogenerate_message, which subsequently passes the return value of this method toEmail::MIME->createunder the"attributes"key.generate_message($c, $attr)β Generate a message part, which should be anEmail::MIMEobject, and return it. Takes the attributes, merges with the defaults as necessary, and returns a message object.
β¨ TROUBLESHOOTING β¨
As with most things computer related, things break. Email even more so. π typically any errors are going to come from using SMTP as your sending method, which means that if you are having trouble, the first place to look is at Email::Sender::Transport::SMTP. This module is just a wrapper for Email::Sender::Simple, so if you get an error on sending, it is likely from there anyway.
If you are using SMTP and have troubles sending β whether it is authentication or a very bland "Can't send" message β make sure that you have Net::SMTP and, if applicable, Net::SMTP::SSL installed.
It is very simple to check that you can connect via Net::SMTP, and if you do have sending errors, the first thing to do is to write a simple script that attempts to connect. If it works, it is probably something in your configuration, so double check there. If it doesn'tβ¦ well, keep modifying the script and/or your mail server configuration until it does! manifest it β¨
β¨ SEE ALSO β¨
Catalyst::View::Email::Templateβ Send fancy template emails with CatCatalyst::Manualβ The Catalyst ManualCatalyst::Manual::Cookbookβ The Catalyst Cookbook
β¨ AUTHORS β¨
- J. Shirley
<jshirley@gmail.com> - Alexander Hartmaier
<abraxxa@cpan.org>
β¨ CONTRIBUTORS β¨
(Thanks!) π«Ά
- Matt S Trout
- Daniel Westermann-Clark
- Simon Elliott
<cpan@browsing.co.uk> - Roman Filippov
- Lance Brown
<lance@bearcircle.net> - Devin Austin
<dhoss@cpan.org> - Chris Nehren
<apeiron@cpan.org>
β¨ COPYRIGHT β¨
Copyright (c) 2007 - 2009 the Catalyst::View::Email "AUTHORS" and "CONTRIBUTORS" as listed above.
β¨ LICENSE β¨
This library is free software, you can redistribute it and/or modify it under the same terms as Perl itself. slay, open source. π
and that's the whole page bestie!! this is perl v5.38.2, dated 2024-03-04 β so if you're reading this, that's the version + date energy you're working with. go forth and send some mail, you got this ππ
π¦ where this page comes from
- debian trixie: libcatalyst-view-email-perl 0.36-4 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- ubuntu noble: libcatalyst-view-email-perl 0.36-4 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- ubuntu resolute: libcatalyst-view-email-perl 0.36-4 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- ubuntu stonking: libcatalyst-view-email-perl 0.36-4 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms