use Email::MIME::Creator;
extends 'Catalyst::View';
-our $VERSION = '0.14';
+our $VERSION = '0.28';
+$VERSION = eval $VERSION;
has 'mailer' => (
is => 'rw',
default => sub { "sendmail" }
);
+has '_mailer_obj' => (
+ is => 'rw',
+ isa => 'Email::Sender::Transport',
+ lazy => 1,
+ builder => '_build_mailer_obj',
+);
+
has 'stash_key' => (
is => 'rw',
isa => 'Str',
has 'content_type' => (
is => 'rw',
- isa => 'Str',
- default => sub { shift->default->{content_type} },
- lazy => 1,
+ isa => 'Str',
+ default => sub { shift->default->{content_type} },
+ lazy => 1,
);
=head1 NAME
charset => 'utf-8'
},
# Setup how to send the email
- # all those options are passed directly to Email::Send
+ # 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::Send
+ # mailer_args is passed directly into Email::Sender::Simple
mailer_args => {
Host => 'smtp.example.com', # defaults to localhost
username => 'username',
=head1 NOTE ON SMTP
-If you use SMTP and don't specify Host, it will default to localhost and
+If you use SMTP and don't specify host, it will default to localhost and
attempt delivery. This often means an email will sit in a queue and
not be delivered.
=item new
-Validates the base config and creates the L<Email::Send> object for later use
+Validates the base config and creates the L<Email::Sender::Simple> object for later use
by process.
=cut
}
+sub _build_mailer_obj {
+ my ($self) = @_;
+ my $transport_class = ucfirst $self->sender->{mailer};
+
+ # borrowed from Email::Sender::Simple -- apeiron, 2010-01-26
+ if ( $transport_class !~ /^Email::Sender::Transport::/ ) {
+ $transport_class = "Email::Sender::Transport::$transport_class";
+ }
+
+ Class::MOP::load_class($transport_class);
+
+ return $transport_class->new( $self->sender->{mailer_args} || {} );
+}
+
=item process($c)
The process method does the actual processing when the view is dispatched to.
-This method sets up the email parts and hands off to L<Email::Send> to handle
+This method sets up the email parts and hands off to L<Email::Sender::Simple> to handle
the actual email delivery.
=cut
my ( $self, $c ) = @_;
croak "Unable to send mail, bad mail configuration"
- unless $self->mailer;
+ unless $self->sender->{mailer};
my $email = $c->stash->{ $self->stash_key };
croak "Can't send email without a valid email structure"
my $message = $self->generate_message( $c, \%mime );
if ($message) {
- my $return = sendmail( $message, { transport => $self->mailer } );
+ my $return = sendmail( $message, { transport => $self->_mailer_obj } );
# return is a Return::Value object, so this will stringify as the error
# in the case of a failure.
my ( $self, $c, $attr ) = @_;
# setup the attributes (merge with defaultis)
- $attr->{attributes} = $self->setup_attributes($c, $attr->{attributes});
- Email::MIME->create(
- %$attr
- );
+ $attr->{attributes} = $self->setup_attributes( $c, $attr->{attributes} );
+ Email::MIME->create( %$attr );
}
=back
+
=head1 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
-L<Email::Send::SMTP>. This module is just a wrapper for L<Email::Send>,
+L<Email::Sender::Transport::SMTP>. This module is just a wrapper for L<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
Devin Austin <dhoss@cpan.org>
+Chris Nehren <apeiron@cpan.org>
+
=head1 COPYRIGHT
Copyright (c) 2007 - 2009