[Catalyst] Cooked up another patch to Catalyst::View::Email.

Evan Carroll lists at evancarroll.com
Thu Aug 30 07:37:11 GMT 2007


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



More information about the Catalyst mailing list