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!"); >> } >>