[Catalyst-dev] Re: Cooked up another patch to Catalyst::View::Email.
Evan Carroll
lists at evancarroll.com
Thu Aug 30 08:01:12 GMT 2007
It just occurred to me, that i forgot to tell you what it does:
we now capture the mailer-method
all around more verbose error output now with suggestions
if warnings are enabled makes user aware of assumptions
- if not just run -X like you should damn well be doing
in production code.
much much more verbose checking on SMTP, we now check
the status of the send
On 8/30/07, Evan Carroll <lists at evancarroll.com> wrote:
> In another attempt to eliminate obnoxious silent assumptions and
> silent erroring, I present another patch. Enjoy.
>
> diff --git a/Email.pm b/Email.pm
> index 7fa09dc..5744a11 100644
> --- a/Email.pm
> +++ b/Email.pm
> @@ -1,6 +1,6 @@
> package Catalyst::View::Email;
>
> -use warnings;
> +use warnings::register;
> use strict;
>
> use Class::C3;
> @@ -13,7 +13,7 @@ use base qw|Catalyst::View|;
>
> our $VERSION = '0.06';
>
> -__PACKAGE__->mk_accessors(qw(sender stash_key content_type mailer));
> +__PACKAGE__->mk_accessors(qw(sender stash_key content_type mailer
> mailer_method));
>
> =head1 NAME
>
> @@ -121,17 +121,42 @@ sub new {
>
> my $mailer = Email::Send->new;
>
> - if ( my $method = $self->sender->{method} ) {
> - croak "$method is not supported, see Email::Send"
> - unless $mailer->mailer_available($method);
> - $mailer->mailer($method);
> - } else {
> - # Default case, run through the most likely options first.
> - for ( qw/SMTP Sendmail Qmail/ ) {
> - $mailer->mailer($_) and last if $mailer->mailer_available($_);
> + my $chosen_method; ## get the chosen_method;
> + if ( $chosen_method ||= $self->sender->{method} ) {
> + croak "$chosen_method is not supported, see Email::Send"
> + . "\n\tOther installed options might include: [
> @{[$mailer->all_mailers]} ]"
> + unless $mailer->mailer_available($chosen_method);
> + }
> + else {
> +
> + foreach my $default_method ( qw/SMTP Sendmail Qmail/ ) {
> +
> + if ( $mailer->mailer_available($default_method) ) {
> +
> + $chosen_method = $default_method;
> +
> + warnings::warnif( 'Warning: ' . __PACKAGE__
> + . " is making assumption that $default_method is the
> desired method"
> + . "\n\tOther installed options might include: [
> @{[$mailer->all_mailers]} ]"
> + );
> +
> + last;
> +
> }
> +
> + }
> +
> + croak 'You have neither specified a valid ' . __PACKAGE__ . ' method'
> + . ' nor could one be found in our suggested list'
> + . "\n\tOther installed options might include: [
> @{[$mailer->all_mailers]} ]"
> + unless $chosen_method;
> +
> }
>
> + $mailer->mailer( $chosen_method );
> +
> + $self->mailer_method( $chosen_method );
> +
> if ( my $args = $self->sender->{mailer_args} ) {
> if ( ref $args eq 'HASH' ) {
> $mailer->mailer_args([ %$args ]);
> @@ -190,7 +215,10 @@ sub process {
> my $message = Email::MIME->create(%mime);
>
> if ( $message ) {
> - $self->mailer->send($message);
> + my $resp = $self->mailer->send($message);
> + croak "SMTP is dieing caught with Email::Send::SMTP specific code $resp"
> + if $self->mailer_method eq 'SMTP' and !$resp
> + ;
> } else {
> croak "Unable to create message";
> }
>
>
> --
> Evan Carroll
> System Lord of the Internets
> me at evancarroll.com
> 832-445-8877
>
--
Evan Carroll
System Lord of the Internets
me at evancarroll.com
832-445-8877
More information about the Catalyst-dev
mailing list