Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ~]# diff -u MIME-Lite-3.027/lib/MIME/Lite.pm /usr/lib/perl5/site_perl/5.8.8/MIME/Lite.pm
- --- MIME-Lite-3.027/lib/MIME/Lite.pm 2009-10-10 04:04:04.000000000 +0200
- +++ /usr/lib/perl5/site_perl/5.8.8/MIME/Lite.pm 2010-09-15 18:47:00.000000000 +0200
- @@ -404,6 +404,8 @@
- sendmail => [$SENDMAIL ? "$SENDMAIL -t -oi -oem" : undef],
- smtp => [],
- sub => [],
- + tls => [],
- + ssl => [],
- );
- ### Boundary counter:
- @@ -2565,22 +2567,28 @@
- if (@_) { ### args; use them just this once
- $method = 'send_by_' . $meth;
- @args = @_;
- - } else { ### no args; use defaults
- + } elsif (@_) { ### no args; use defaults
- $method = "send_by_$Sender";
- @args = @{ $SenderArgs{$Sender} || [] };
- - }
- - $self->verify_data if $AUTO_VERIFY; ### prevents missing parts!
- - Carp::croak "Unknown send method '$meth'" unless $self->can($method);
- - return $self->$method(@args);
- - } else { ### class method:
- - if (@_) {
- + } elsif (@_) {
- my @old = ( $Sender, @{ $SenderArgs{$Sender} } );
- $Sender = $meth;
- $SenderArgs{$Sender} = [@_]; ### remaining args
- return @old;
- - } else {
- + } elsif (@_) {
- + $method = "send_by_$Sender";
- + @args = @{ $SenderArgs{$Sender} || [] };
- + } elsif (@_) {
- + $method = "send_by_$Sender";
- + @args = @{ $SenderArgs{$Sender} || [] };
- +
- +
- + $self->verify_data if $AUTO_VERIFY; ### prevents missing parts!
- + Carp::croak "Unknown send method '$meth'" unless $self->can($method);
- + return $self->$method(@args);
- + } else {
- Carp::croak "class method send must have HOW... arguments\n";
- - }
- + }
- }
- }
- @@ -2908,6 +2916,150 @@
- return $self->{last_send_successful} = 1;
- }
- +sub send_by_tls {
- + require Net::SMTP::TLS;
- + require Net::SMTP_auth;
- + my ($self,$hostname,%args) = @_;
- + # We may need the "From:" and "To:" headers to pass to the
- + # SMTP mailer also.
- + $self->{last_send_successful}=0;
- +
- + my @hdr_to = extract_only_addrs( scalar $self->get('To') );
- + if ($AUTO_CC) {
- + foreach my $field (qw(Cc Bcc)) {
- + push @hdr_to, extract_only_addrs($_) for $self->get($field);
- + }
- + }
- + Carp::croak "send_by_smtp: nobody to send to for host '$hostname'?!\n"
- + unless @hdr_to;
- +
- + $args{To} ||= \@hdr_to;
- + $args{From} ||= extract_only_addrs( scalar $self->get('Return-Path') );
- + $args{From} ||= extract_only_addrs( scalar $self->get('From') ) ;
- +
- + # Create SMTP client.
- + # MIME::Lite::SMTP is just a wrapper giving a print method
- + # to the SMTP object.
- +
- + my %opts = __opts(\%args, @_net_smtp_opts);
- + my $smtp = MIME::Lite::SMTP::TLS->new( $hostname, %opts )
- + or Carp::croak "SMTP Failed to connect to mail server: $!\n";
- +
- + # Possibly authenticate
- + if ( defined $args{AuthUser} and defined $args{AuthPass}
- + and !$args{NoAuth} )
- + {
- + if ($smtp->supports('AUTH',500,["Command unknown: 'AUTH'"])) {
- + $smtp->auth( $args{AuthUser}, $args{AuthPass} )
- + or die "SMTP auth() command failed: $!\n"
- + . $smtp->message . "\n";
- + } else {
- + die "SMTP auth() command not supported on $hostname\n";
- + }
- + }
- +
- + # Send the mail command
- + %opts = __opts( \%args, @_mail_opts);
- + $smtp->mail( $args{From}, %opts ? \%opts : () )
- + or die "SMTP mail() command failed: $!\n"
- + . $smtp->message . "\n";
- +
- + # Send the recipients command
- + %opts = __opts( \%args, @_recip_opts);
- + $smtp->recipient( @{ $args{To} }, %opts ? \%opts : () )
- + or die "SMTP recipient() command failed: $!\n"
- + . $smtp->message . "\n";
- +
- + # Send the data
- + $smtp->data()
- + or die "SMTP data() command failed: $!\n"
- + . $smtp->message . "\n";
- + $self->print_for_smtp($smtp);
- +
- + # Finish the mail
- + $smtp->dataend()
- + or Carp::croak "Net::CMD (Net::SMTP) DATAEND command failed.\n"
- + . "Last server message was:"
- + . $smtp->message
- + . "This probably represents a problem with newline encoding ";
- +
- + # terminate the session
- + $smtp->quit;
- +
- + return $self->{last_send_successful} = 1;
- +}
- +sub send_by_ssl {
- + require Net::SMTP::SSL;
- + require Net::SMTP_auth;
- + my ($self,$hostname,%args) = @_;
- + # We may need the "From:" and "To:" headers to pass to the
- + # SMTP mailer also.
- + $self->{last_send_successful}=0;
- +
- + my @hdr_to = extract_only_addrs( scalar $self->get('To') );
- + if ($AUTO_CC) {
- + foreach my $field (qw(Cc Bcc)) {
- + push @hdr_to, extract_only_addrs($_) for $self->get($field);
- + }
- + }
- + Carp::croak "send_by_smtp: nobody to send to for host '$hostname'?!\n"
- + unless @hdr_to;
- +
- + $args{To} ||= \@hdr_to;
- + $args{From} ||= extract_only_addrs( scalar $self->get('Return-Path') );
- + $args{From} ||= extract_only_addrs( scalar $self->get('From') ) ;
- +
- + # Create SMTP client.
- + # MIME::Lite::SMTP is just a wrapper giving a print method
- + # to the SMTP object.
- +
- + my %opts = __opts(\%args, @_net_smtp_opts);
- + my $smtp = MIME::Lite::SMTP::SSL->new( $hostname, %opts )
- + or Carp::croak "SMTP Failed to connect to mail server: $!\n";
- +
- + # Possibly authenticate
- + if ( defined $args{AuthUser} and defined $args{AuthPass}
- + and !$args{NoAuth} )
- + {
- + if ($smtp->supports('AUTH',500,["Command unknown: 'AUTH'"])) {
- + $smtp->auth( $args{AuthUser}, $args{AuthPass} )
- + or die "SMTP auth() command failed: $!\n"
- + . $smtp->message . "\n";
- + } else {
- + die "SMTP auth() command not supported on $hostname\n";
- + }
- + }
- +
- + # Send the mail command
- + %opts = __opts( \%args, @_mail_opts);
- + $smtp->mail( $args{From}, %opts ? \%opts : () )
- + or die "SMTP mail() command failed: $!\n"
- + . $smtp->message . "\n";
- +
- + # Send the recipients command
- + %opts = __opts( \%args, @_recip_opts);
- + $smtp->recipient( @{ $args{To} }, %opts ? \%opts : () )
- + or die "SMTP recipient() command failed: $!\n"
- + . $smtp->message . "\n";
- +
- + # Send the data
- + $smtp->data()
- + or die "SMTP data() command failed: $!\n"
- + . $smtp->message . "\n";
- + $self->print_for_smtp($smtp);
- +
- + # Finish the mail
- + $smtp->dataend()
- + or Carp::croak "Net::CMD (Net::SMTP) DATAEND command failed.\n"
- + . "Last server message was:"
- + . $smtp->message
- + . "This probably represents a problem with newline encoding ";
- +
- + # terminate the session
- + $smtp->quit;
- +
- + return $self->{last_send_successful} = 1;
- +}
- =item send_by_testfile FILENAME
- @@ -3125,6 +3277,90 @@
- . "This probably represents a problem with newline encoding " );
- }
- +#============================================================
- +
- +package MIME::Lite::SMTP::TLS;
- +
- +#============================================================
- +# This class just adds a print() method to Net::SMTP.
- +# Notice that we don't use/require it until it's needed!
- +
- +use strict;
- +use vars qw( @ISA );
- +@ISA = qw(Net::SMTP::TLS);
- +
- +# some of the below is borrowed from Data::Dumper
- +my %esc = ( "\a" => "\\a",
- + "\b" => "\\b",
- + "\t" => "\\t",
- + "\n" => "\\n",
- + "\f" => "\\f",
- + "\r" => "\\r",
- + "\e" => "\\e",
- + );
- +
- +sub _hexify {
- + local $_ = shift;
- + my @split = m/(.{1,16})/gs;
- + foreach my $split (@split) {
- + ( my $txt = $split ) =~ s/([\a\b\t\n\f\r\e])/$esc{$1}/sg;
- + $split =~ s/(.)/sprintf("%02X ",ord($1))/sge;
- + print STDERR "M::L >>> $split : $txt\n";
- + }
- +}
- +
- +sub print {
- + my $smtp = shift;
- + $MIME::Lite::DEBUG and _hexify( join( "", @_ ) );
- + $smtp->datasend(@_)
- + or Carp::croak( "Net::CMD (Net::SMTP) DATASEND command failed.\n"
- + . "Last server message was:"
- + . $smtp->message
- + . "This probably represents a problem with newline encoding " );
- +}
- +
- +#============================================================
- +
- +package MIME::Lite::SMTP::SSL;
- +
- +#============================================================
- +# This class just adds a print() method to Net::SMTP.
- +# Notice that we don't use/require it until it's needed!
- +
- +use strict;
- +use vars qw( @ISA );
- +@ISA = qw(Net::SMTP::SSL);
- +
- +# some of the below is borrowed from Data::Dumper
- +my %esc = ( "\a" => "\\a",
- + "\b" => "\\b",
- + "\t" => "\\t",
- + "\n" => "\\n",
- + "\f" => "\\f",
- + "\r" => "\\r",
- + "\e" => "\\e",
- + );
- +
- +sub _hexify {
- + local $_ = shift;
- + my @split = m/(.{1,16})/gs;
- + foreach my $split (@split) {
- + ( my $txt = $split ) =~ s/([\a\b\t\n\f\r\e])/$esc{$1}/sg;
- + $split =~ s/(.)/sprintf("%02X ",ord($1))/sge;
- + print STDERR "M::L >>> $split : $txt\n";
- + }
- +}
- +
- +sub print {
- + my $smtp = shift;
- + $MIME::Lite::DEBUG and _hexify( join( "", @_ ) );
- + $smtp->datasend(@_)
- + or Carp::croak( "Net::CMD (Net::SMTP) DATASEND command failed.\n"
- + . "Last server message was:"
- + . $smtp->message
- + . "This probably represents a problem with newline encoding " );
- +}
- +
- #============================================================
Advertisement
Add Comment
Please, Sign In to add comment