The problem seems to appear when sending an alert email, at least for
me. By inserting a slew of syslog debug messages I found out that the
"smtpsend" function turns out to be the last one called from NfAlert.pm
before the PANIC.
I am not sure what exactly goes wrong -- it seems to be some XS code
that isn't reentrant, though I don't see where that is -- but replacing
the Mail::* modules with Email::*, which locally uses "sendmail" by
default, seems to do the trick. A patch for this against nfsen-1.3.8 is
provided below.
--
Peter Rathlev
--- nfsen-1.3.8/libexec/NfAlert.pm 2014-06-23 21:27:50.000000000 +0200
+++ nfsen-1.3.8-rmnet-20190114/libexec/NfAlert.pm 2019-01-14
15:21:02.475224196 +0100
@@ -41,8 +41,9 @@
use Storable qw(lock_store lock_retrieve);
use POSIX ":sys_wait_h";
use POSIX 'strftime';
-use Mail::Header;
-use Mail::Internet;
+use Email::Sender::Simple qw( sendmail );
+use Email::Simple;
+use Email::Simple::Creator;
use NfSen;
use NfSenRRD;
@@ -842,53 +843,31 @@
if ( ($$alertref{'action_type'} & 1) > 0 ) {
syslog('debug', "alert '$alert' Send email to:
$$alertref{'action_email'}");
- my @header = (
- "From: $NfConf::MAIL_FROM",
- "To: $$alertref{'action_email'}",
- "Subject: $$alertref{'action_subject'}"
- );
-
- my $mail_header = new Mail::Header( \@header ) ;
-
my $mail_body_string = $NfConf::MAIL_BODY;
# substitute all vars
- my %replace = (
- 'alert' => $alert,
- 'timeslot' => $timeslot,
+ my %replace = (
+ 'alert' => $alert,
+ 'timeslot' => $timeslot,
);
foreach my $key ( keys %replace ) {
$mail_body_string =~ s/\@$key\@/$replace{$key}/g;
}
- my @mail_body = split /\n/, $mail_body_string;
-
- my $mail = new Mail::Internet(
- Header => $mail_header,
- Body => \@mail_body,
- );
-
- my @sent_to = $mail->smtpsend(
- Host => $NfConf::SMTP_SERVER ,
- Hello => $NfConf::SMTP_SERVER,
- MailFrom => $NfConf::MAIL_FROM
+ my $mail = Email::Simple->create(
+ 'header' => [
+ "From" => $NfConf::MAIL_FROM,
+ "To" => $$alertref{'action_email'},
+ "Subject" => $$alertref{'action_subject'},
+ ],
+ 'body' => $mail_body_string,
);
- # Do we have failed receipients?
- my %_tmp;
- my @_recv = split /\s*,\s*/, $$alertref{'action_email'};
- @_tmp{@_recv} = 1;
- delete @_tmp{@sent_to};
- my @Failed = keys %_tmp;
-
- foreach my $rcpt ( @sent_to ) {
- syslog('info', "alert '$alert' : Successful sent mail
to: '$rcpt'");
- }
- if ( scalar @Failed > 0 ) {
- foreach my $rcpt ( @Failed ) {
- syslog('err', "alert '$alert' : Failed to send
alert email to: $rcpt");
- }
- }
-
+ eval { sendmail($mail); };
+ if ($@) {
+ syslog('err', "alert '$alert' : Failed to send alert
email: $@");
+ } else {
+ syslog('info', "alert '$alert' : Successfully sent
alert mail");
+ }
}
# execute system command
_______________________________________________
Nfsen-discuss mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/nfsen-discuss