%PDF- %PDF-
| Direktori : /proc/self/root/proc/self/root/usr/share/perl5/vendor_perl/Email/Sender/ |
| Current File : //proc/self/root/proc/self/root/usr/share/perl5/vendor_perl/Email/Sender/Simple.pm |
package Email::Sender::Simple;
{
$Email::Sender::Simple::VERSION = '0.120002';
}
use Moose;
with 'Email::Sender::Role::CommonSending';
# ABSTRACT: the simple interface for sending mail with Sender
use Sub::Exporter::Util ();
use Sub::Exporter -setup => {
exports => {
sendmail => Sub::Exporter::Util::curry_class('send'),
try_to_sendmail => Sub::Exporter::Util::curry_class('try_to_send'),
},
};
use Email::Address;
use Email::Sender::Transport;
use Try::Tiny;
{
my $DEFAULT_TRANSPORT;
my $DEFAULT_FROM_ENV;
sub _default_was_from_env {
my ($self) = @_;
$self->default_transport;
return $DEFAULT_FROM_ENV;
}
sub default_transport {
return $DEFAULT_TRANSPORT if $DEFAULT_TRANSPORT;
my ($self) = @_;
if ($ENV{EMAIL_SENDER_TRANSPORT}) {
my $transport_class = $ENV{EMAIL_SENDER_TRANSPORT};
if ($transport_class !~ tr/://) {
$transport_class = "Email::Sender::Transport::$transport_class";
}
Class::MOP::load_class($transport_class);
my %arg;
for my $key (grep { /^EMAIL_SENDER_TRANSPORT_\w+/ } keys %ENV) {
(my $new_key = $key) =~ s/^EMAIL_SENDER_TRANSPORT_//;
$arg{lc $new_key} = $ENV{$key};
}
$DEFAULT_FROM_ENV = 1;
$DEFAULT_TRANSPORT = $transport_class->new(\%arg);
} else {
$DEFAULT_FROM_ENV = 0;
$DEFAULT_TRANSPORT = $self->build_default_transport;
}
return $DEFAULT_TRANSPORT;
}
sub build_default_transport {
require Email::Sender::Transport::Sendmail;
my $transport = eval { Email::Sender::Transport::Sendmail->new };
return $transport if $transport;
require Email::Sender::Transport::SMTP;
Email::Sender::Transport::SMTP->new;
}
sub reset_default_transport {
undef $DEFAULT_TRANSPORT;
undef $DEFAULT_FROM_ENV;
}
}
# Maybe this should be an around, but I'm just not excited about figuring out
# order at the moment. It just has to work. -- rjbs, 2009-06-05
around prepare_envelope => sub {
my ($orig, $self, $arg) = @_;
$arg ||= {};
my $env = $self->$orig($arg);
$env = {
%$arg,
%$env,
};
return $env;
};
sub send_email {
my ($self, $email, $arg) = @_;
my $transport = $self->default_transport;
if ($arg->{transport}) {
$arg = { %$arg }; # So we can delete transport without ill effects.
$transport = delete $arg->{transport} unless $self->_default_was_from_env;
}
confess("transport $transport not safe for use with Email::Sender::Simple")
unless $transport->is_simple;
my ($to, $from) = $self->_get_to_from($email, $arg);
Email::Sender::Failure::Permanent->throw("no recipients") if ! @$to;
Email::Sender::Failure::Permanent->throw("no sender") if ! defined $from;
return $transport->send(
$email,
{
to => $to,
from => $from,
},
);
}
sub try_to_send {
my ($self, $email, $arg) = @_;
try {
return $self->send($email, $arg);
} catch {
my $error = $_ || 'unknown error';
return if try { $error->isa('Email::Sender::Failure') };
die $error;
};
}
sub _get_to_from {
my ($self, $email, $arg) = @_;
my $to = $arg->{to};
unless (@$to) {
my @to_addrs =
map { $_->address }
grep { defined }
map { Email::Address->parse($_) }
map { $email->get_header($_) }
qw(to cc);
$to = \@to_addrs;
}
my $from = $arg->{from};
unless (defined $from) {
($from) =
map { $_->address }
grep { defined }
map { Email::Address->parse($_) }
map { $email->get_header($_) }
qw(from);
}
return ($to, $from);
}
no Moose;
"220 OK";
__END__
=pod
=head1 NAME
Email::Sender::Simple - the simple interface for sending mail with Sender
=head1 VERSION
version 0.120002
=head1 SEE INSTEAD
For now, the best documentation of this class is in
L<Email::Sender::Manual::QuickStart>.
=head1 AUTHOR
Ricardo Signes <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2012 by Ricardo Signes.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut