Revision 24ab7ec0
Von Moritz Bunkus vor mehr als 9 Jahren hinzugefügt
SL/Mailer/SMTP.pm | ||
---|---|---|
|
||
use Rose::Object::MakeMethods::Generic
|
||
(
|
||
scalar => [ qw(myconfig mailer form) ]
|
||
scalar => [ qw(myconfig mailer form status extended_status) ]
|
||
);
|
||
|
||
my %security_config = (
|
||
... | ... | |
sub init {
|
||
my ($self) = @_;
|
||
|
||
Rose::Object::init(@_);
|
||
Rose::Object::init(
|
||
@_,
|
||
status => 'failed',
|
||
extended_status => 'no send attempt made',
|
||
);
|
||
|
||
my $cfg = $::lx_office_conf{mail_delivery} || {};
|
||
$self->{security} = exists $security_config{lc $cfg->{security}} ? lc $cfg->{security} : 'none';
|
||
my $sec_cfg = $security_config{ $self->{security} };
|
||
|
||
eval "require $sec_cfg->{require_module}" or die "$@";
|
||
eval "require $sec_cfg->{require_module}" or do {
|
||
$self->extended_status("$@");
|
||
die $self->extended_status;
|
||
};
|
||
|
||
$self->{smtp} = $sec_cfg->{package}->new($cfg->{host} || 'localhost', Port => $cfg->{port} || $sec_cfg->{port});
|
||
die unless $self->{smtp};
|
||
|
||
$self->{smtp}->starttls(SSL_verify_mode => 0) || die if $self->{security} eq 'tls';
|
||
if (!$self->{smtp}) {
|
||
$self->extended_status('SMTP connection could not be initialized');
|
||
die $self->extended_status;
|
||
}
|
||
|
||
if ($self->{security} eq 'tls') {
|
||
$self->{smtp}->starttls(SSL_verify_mode => 0) or do {
|
||
$self->extended_status("$@");
|
||
die $self->extended_status;
|
||
};
|
||
}
|
||
|
||
# Backwards compatibility: older Versions used 'user' instead of the
|
||
# intended 'login'. Support both.
|
||
... | ... | |
|
||
return 1 unless $login;
|
||
|
||
$self->{smtp}->auth($login, $cfg->{password}) or die;
|
||
if (!$self->{smtp}->auth($login, $cfg->{password})) {
|
||
$self->extended_status('SMTP authentication failed');
|
||
die $self->extended_status;
|
||
}
|
||
}
|
||
|
||
sub start_mail {
|
||
my ($self, %params) = @_;
|
||
|
||
$self->{smtp}->mail($params{from});
|
||
$self->{smtp}->recipient(@{ $params{to} });
|
||
$self->{smtp}->data;
|
||
$self->{smtp}->mail($params{from}) or do { $self->extended_status($self->{smtp}->message); die $self->extended_status; };
|
||
$self->{smtp}->recipient(@{ $params{to} }) or do { $self->extended_status($self->{smtp}->message); die $self->extended_status; };
|
||
$self->{smtp}->data or do { $self->extended_status($self->{smtp}->message); die $self->extended_status; };
|
||
}
|
||
|
||
sub print {
|
||
... | ... | |
sub send {
|
||
my ($self) = @_;
|
||
|
||
$self->{smtp}->dataend;
|
||
my $ok = $self->{smtp}->dataend;
|
||
$self->extended_status($self->{smtp}->message);
|
||
$self->status('ok') if $ok;
|
||
|
||
$self->{smtp}->quit;
|
||
|
||
delete $self->{smtp};
|
||
}
|
||
|
Auch abrufbar als: Unified diff
E-Mail-Journal: verschickte E-Mails speichern