That would be cool, then we won't have two similar, but slightly
different plugins in the core.  (I'm trying to avoid that unless there
are specific reasons why they *need* to be different.)  It means the
individual plugins are more complex, but I think that's worth it.

-R

Jason Mills wrote:
> 
> I could if you like... I yanked around the internal's quite a bit on my
> version of the plugin.
> But it would be possible I suppose to swap which Net::SMTP class it uses
> based on parameters.
> 
> On 05/11/2010 09:26 PM, Robert Spier wrote:
> > Is it possible to merge this into smtp-forward and have config
> > options?  Or factor out common code into a shared module?
> >
> > Jason Mills wrote:
> >   
> >> =head1 NAME
> >>
> >> smtptls-forward
> >>
> >> =head1 DESCRIPTION
> >>
> >> This plugin forwards the mail via SMTP TLS to a specified server, rather 
> >> than
> >> delivering the email locally.
> >>
> >> This is very similar to the smtp-forward queue plugin. In fact it is just a
> >> heavily modified version smtp-forward.
> >>
> >> =head1 DEPENDANCIES
> >>
> >> Currently L<Net::SMTP::TLS> is the only non-qpstmpd dependancy.
> >>
> >> =head1 CONFIG
> >>
> >> Configuration is mostly strait forward. Simply add it into your qpsmtpd 
> >> config
> >> root's plugins file in the form of:
> >>
> >>   queue/smtptls-forward <remote smtp server address> <username> <password>
> >>
> >> Or alternately:
> >>
> >>   queue/smtptls-forward <address> <port> <username> <password>
> >>   
> >> The end result should look something like this:
> >>
> >>   queue/smtptls-forward 10.2.2.2 emailguy s3cr3t
> >>
> >> Or maybe this:
> >>
> >>   queue/smtptls-forward smtp.othermailhost.com 587 emailguy s3cr3t
> >>
> >> =head1 REASONING
> >>
> >> This plugin is mostly useful for debugging and or testing local qpsmtpd 
> >> although there is nothing to stop you from using this to deliver mail to
> >> external addresses from your local machine. YMMV.
> >>
> >> =head1 CAVEATS
> >>
> >> Sadly the dependant TLS transport class L<Net::SMTP::TLS> has a few bugs 
> >> which
> >> prevent this plugin from having as much error reporting/correction as would
> >> normally be desired. As of this writing it appears that L<Net::SMTP::TLS> 
> >> is
> >> without a loving maintainer (please see 
> >> https://rt.cpan.org/Dist/Display.html?Name=Net-SMTP-TLS) which may in the
> >> future motivate this programmer to either rewrite this plugin to use a
> >> different TLS transport class or consult with the PAUSE authorities that 
> >> be to
> >> take up the mantle of maintainer for L<Net::SMTP::TLS>
> >>
> >> =cut
> >>
> >> use Net::SMTP::TLS;
> >>
> >> sub init {
> >>   my ($self, $qp, @args) = @_;
> >>
> >>   if (@args > 0) {
> >>     
> >>     if ($args[0] =~ /^([\.\w_-]+)$/) {
> >>       $self->{_smtp_server} = $1;
> >>       shift(@args);
> >>     } else {
> >>       die "Bad data in smtp server: $args[0]";
> >>     }
> >>     
> >>     $self->{_smtp_port} = 25;
> >>     
> >>     if (@args != 0 and $args[0] =~ /^(\d+)$/) {
> >>       $self->{_smtp_port} = $1;
> >>       shift(@args);
> >>     }
> >>            
> >>     die("smtptls-forward requires username and password config")
> >>       unless @args == 2;
> >>            
> >>     ($self->{_smtp_user}, $self->{_smtp_pass}) = @args;
> >>
> >>     $self->log(LOGWARN, "WARNING: Ignoring additional arguments.") if 
> >> (@args > 2);
> >>   
> >>   } else {
> >>     
> >>     die("No SMTP server specified in smtp-forward config");
> >>     
> >>   }
> >>
> >> }
> >>
> >> sub hook_queue {
> >>   my ($self, $transaction) = @_;
> >>
> >>   $self->log(
> >>     LOGINFO,
> >>     "forwarding to $self->{_smtp_server}:$self->{_smtp_port}"
> >>   );
> >>   
> >>   my $smtp = Net::SMTP::TLS->new(
> >>     $self->{_smtp_server},
> >>     Port => $self->{_smtp_port},
> >>     Timeout => 60,
> >>     User => $self->{_smtp_user},
> >>     Password => $self->{_smtp_pass},
> >>     Hello => $self->qp->config("me"),
> >>   );
> >>   
> >>   return (
> >>     DECLINED,
> >>     "Unable to queue message, failed to connect to smtp-tls server ($!)"
> >>   ) unless $smtp;
> >>   
> >>   # NOTE: Net-SMTP-TLS isn't a drop in replacement for Net::SMTP
> >>   # it seems to not return correctly
> >>   # so in this case we are going to simply fire it off and
> >>   # check $! for errors
> >>   # At some point maybe someone will take up maintainership of this package
> >>   # See: https://rt.cpan.org/Dist/Display.html?Name=Net-SMTP-TLS
> >>   
> >>   $smtp->mail( $transaction->sender->address );
> >>   return(DECLINED, "Unable to queue message: smtp-tls ($!)") if $!;
> >>   
> >>   $smtp->to($_->address)
> >>     foreach ($transaction->recipients);
> >>   
> >>   return(DECLINED, "Unable to queue message: smtp-tls ($!)") if $!;
> >>   
> >>   my $payload = $transaction->header->as_string;
> >>   $payload .= $transaction->body_as_string;
> >>   
> >>   $smtp->data();
> >>   $smtp->datasend($payload);
> >>   $smtp->dataend();
> >>   
> >>   return(DECLINED, "Unable to queue message: smtp-tls ($!)") if $!;
> >>   
> >>   $smtp->quit();
> >>     
> >>   return(DECLINED, "Unable to queue message: smtp-tls ($!)") if $!;
> >>   
> >>   $self->log(LOGINFO, "finished queueing");
> >>   
> >>   return (OK, "Queued!");
> >> }
> >>     
> 

Reply via email to