Email::Send::SMTP::TLS - Send Email using Net::SMTP::TLS (esp. Gmail)


Email-Send-SMTP-TLS documentation Contained in the Email-Send-SMTP-TLS distribution.

Index


Code Index:

NAME

Top

Email::Send::SMTP::TLS - Send Email using Net::SMTP::TLS (esp. Gmail)

SYNOPSIS

Top

    use Email::Send;

    my $mailer = Email::Send->new( {
        mailer => 'SMTP::TLS',
        mailer_args => [
            Host => 'smtp.gmail.com',
            Port => 587,
            User => 'username@gmail.com',
            Password => 'password',
            Hello => 'fayland.org',
        ]
    } );

    use Email::Simple::Creator; # or other Email::
    my $email = Email::Simple->create(
        header => [
            From    => 'username@gmail.com',
            To      => 'to@mail.com',
            Subject => 'Subject title',
        ],
        body => 'Content.',
    );

    eval { $mailer->send($email) };
    die "Error sending email: $@" if $@;

DESCRIPTION

Top

We can use this module to send email through smtp.gmail.com. Email::Send::Gmail use SSL, while this module use TLS.

Of course, others who support TLS also can use it.

SEE ALSO

Top

Email::Send, Net::SMTP::TLS

COPYRIGHT & LICENSE

Top


Email-Send-SMTP-TLS documentation Contained in the Email-Send-SMTP-TLS distribution.

package Email::Send::SMTP::TLS;

use warnings;
use strict;
use vars qw[$VERSION];
use Email::Address;
use Net::SMTP::TLS::ButMaintained;
use Return::Value;

$VERSION   = '0.04';

sub is_available {
    return 1;
}

sub get_env_sender {
    my ( $class, $message ) = @_;

    my $from
        = ( Email::Address->parse( $message->header('From') ) )[0]->address;
}

sub get_env_recipients {
    my ( $class, $message ) = @_;

    my %to = map { $_->address => 1 }
        map { Email::Address->parse( $message->header($_) ) } qw(To Cc Bcc);

    return keys %to;
}

sub send {
    my ($class, $message, @args) = @_;

    my %args;
    if ( @args % 2 ) {
        my $host = shift @args;
        %args = @args;
        $args{Host} = $host;
    } else {
        %args = @args;
    }

    my $host = delete($args{Host}) || 'localhost';
    my $SMTP = Net::SMTP::TLS::ButMaintained->new($host, %args);
    
    eval {
        my $from = $class->get_env_sender($message);
        $SMTP->mail($from);
        
        my @to = $class->get_env_recipients($message);
        $SMTP->to( @to );
        
    };
    return failure $@ if $@;
    
    $SMTP->data();
    $SMTP->datasend( $message->as_string );
    $SMTP->dataend;
    $SMTP->quit;

     return success 1;
}

1;
__END__