ASNMTAP
view release on metacpan or search on metacpan
lib/ASNMTAP/Asnmtap/Plugins/Mail.pm view on Meta::CPAN
return ( $ERRORS{UNKNOWN} );
}
unless ( defined $_[0]->{_mail}->{to} ) {
$$asnmtapInherited->pluginValues ( { stateValue => $ERRORS{UNKNOWN}, error => 'Missing MAIL parameter _mail => {to => ...}' }, $TYPE{APPEND} );
return ( $ERRORS{UNKNOWN} );
}
unless ( defined $_[0]->{_mail}->{status} ) {
$$asnmtapInherited->pluginValues ( { stateValue => $ERRORS{UNKNOWN}, error => 'Missing MAIL parameter _mail => {status => ...}' }, $TYPE{APPEND} );
return ( $ERRORS{UNKNOWN} );
}
unless ( defined $_[0]->{_mail}->{body} ) {
$$asnmtapInherited->pluginValues ( { stateValue => $ERRORS{UNKNOWN}, error => 'Missing MAIL parameter _mail => {body => ...}' }, $TYPE{APPEND} );
return ( $ERRORS{UNKNOWN} );
}
$_[0]->[ $_[0]->[0]{_subject_} = @{$_[0]} ] = $_[0]->{_text}->{SUBJECT} .' / '. $_[0]->{_text}->{from} .' '. $_[0]->{_mail}->{from} .' '. $_[0]->{_text}->{to} .' '. $_[0]->{_mail}->{to};
unless ( $_[0]->{_mailType} ) {
$_[0]->[ $_[0]->[0]{_branding_} = @{$_[0]} ] = '<'. $$asnmtapInherited->{_programName} .'> <'. $$asnmtapInherited->{_programDescription} .'>';
$_[0]->[ $_[0]->[0]{_timestamp_} = @{$_[0]} ] = 'Timestamp <'. $_[0]->{_mail}->{from} .'>:';
$_[0]->[ $_[0]->[0]{_status_} = @{$_[0]} ] = $_[0]->{_text}->{status} .' <'. $_[0]->{_mail}->{status} .'>';
}
if ( $$asnmtapInherited->{_debug} ) {
use Data::Dumper;
print "\n". ref ($_[0]) .": Now we'll dump data\n\n", Dumper ( $_[0] ), "\n\n";
}
}
# Utility methods - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sub sending_fingerprint_mail {
my $self = shift; &_checkAccObjRef ( $self );
my $asnmtapInherited = $self->{_asnmtapInherited};
return ( $$asnmtapInherited->pluginValue ('stateValue') ) unless ( exists $self->{_subject_} );
my %defaults = ( perfdataLabel => undef );
my %parms = (%defaults, @_);
$$asnmtapInherited->setEndTime_and_getResponsTime ( $$asnmtapInherited->pluginValue ('endTime') ) if ( defined $parms{perfdataLabel} );
use Mail::Sendmail qw(sendmail %mailcfg);
$mailcfg {smtp} = $self->{_SMTP}->{smtp};
$mailcfg {port} = $self->{_SMTP}->{port};
$mailcfg {retries} = $self->{_SMTP}->{retries};
$mailcfg {delay} = $self->{_SMTP}->{delay};
$mailcfg {mime} = $self->{_SMTP}->{mime};
$mailcfg {tz} = $self->{_SMTP}->{tx} if ( defined $self->{_SMTP}->{tx} );
$mailcfg {debug} = $$asnmtapInherited->getOptionsValue ('debug');
my $message;
if ( $self->{_mailType} ) {
use Time::Local;
my ($localYear, $localMonth, $currentYear, $currentMonth, $currentDay, $currentHour, $currentMin, $currentSec) = ((localtime)[5], (localtime)[4], ((localtime)[5] + 1900), ((localtime)[4] + 1), (localtime)[3,2,1,0]);
my $mailEpochtime = timelocal($currentSec, $currentMin, $currentHour, $currentDay, $localMonth, $localYear);
$message = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE FingerprintEmail SYSTEM \"dtd/FingerprintEmail-1.0.dtd\"><FingerprintEmail><Schema Value=\"1.0\"/><Fingerprint From=\"". $self->{_mail}->{from} ."\" To=\"". $self->{_mail}->{to} ."\"...
} else {
use ASNMTAP::Time qw(&get_datetimeSignal);
$message = $self->{_subject_} ."\n". $self->{_branding_} ."\n". $self->{_timestamp_} .' '. get_datetimeSignal() ."\n". $self->{_status_} ."\n";
}
$message .= $self->{_mail}->{body} ."\n";
my %mail = ( To => $self->{_mail}->{to}, From => $self->{_mail}->{from}, Subject => $self->{_subject_}, Message => $message );
my $returnCode = (sendmail %mail) ? $ERRORS{OK} : $ERRORS{CRITICAL};
$$asnmtapInherited->pluginValues ( { stateValue => $returnCode, alert => ( defined $parms{perfdataLabel} ? $parms{perfdataLabel} : 'email send' ) . ( $returnCode ? ' failed' : '' ) }, $TYPE{APPEND} );
if ( defined $parms{perfdataLabel} ) {
my $responseTime = $$asnmtapInherited->setEndTime_and_getResponsTime ( $$asnmtapInherited->pluginValue ('endTime') );
$$asnmtapInherited->appendPerformanceData ( "'". $parms{perfdataLabel} ."'=". $responseTime .'ms;;;;' );
}
print "\$Mail::Sendmail::log says:\n", $Mail::Sendmail::log, "\n" if ( $$asnmtapInherited->getOptionsValue ('debug') );
return ( $returnCode );
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sub receiving_fingerprint_mails {
my $self = shift; &_checkAccObjRef ( $self );
my $asnmtapInherited = $self->{_asnmtapInherited};
return ( $$asnmtapInherited->pluginValue ('stateValue') ) unless ( exists $self->{_subject_} );
my %defaults = ( custom => undef,
customArguments => undef,
checkFingerprint => 1,
receivedState => 0,
outOfDate => undef,
perfdataLabel => undef
);
my %parms = (%defaults, @_);
if ( $self->{_mailType} ) {
unless ( defined $parms{outOfDate} ) {
$$asnmtapInherited->pluginValues ( { stateValue => $ERRORS{UNKNOWN}, error => 'Missing MAIL receiving_fingerprint_mails parameter {outOfDate => ...}' }, $TYPE{APPEND} );
return ( $ERRORS{UNKNOWN} );
}
}
use ASNMTAP::Asnmtap::Plugins::XML qw(&extract_XML);
$self->[ $self->[0]{defaultArguments} = @{$self} ] = { date => undef, day => undef, month => undef, year => undef, time => undef, hour => undef, min => undef, sec => undef, numberOfMatches => undef, result => undef };
unless ($parms{checkFingerprint} =~ /^[01]$/ ) {
$$asnmtapInherited->pluginValues ( { stateValue => $ERRORS{UNKNOWN}, error => 'Parameter checkFingerprint must be 0 or 1' }, $TYPE{APPEND} );
return ( $ERRORS{UNKNOWN} );
}
unless ($parms{receivedState} =~ /^[01]$/ ) {
$$asnmtapInherited->pluginValues ( { stateValue => $ERRORS{UNKNOWN}, error => 'Parameter receivedState must be 0 or 1' }, $TYPE{APPEND} );
return ( $ERRORS{UNKNOWN} );
}
my ($numberOfMails, $email);
lib/ASNMTAP/Asnmtap/Plugins/Mail.pm view on Meta::CPAN
$$asnmtapInherited->pluginValues ( { stateValue => $ERRORS{UNKNOWN}, error => 'Missing Mail IMAP4 parameter password' }, $TYPE{APPEND} );
return ( $ERRORS{UNKNOWN} );
}
use Net::IMAP::Simple;
$email = Net::IMAP::Simple->new ( $self->{_IMAP4}->{imap4}, port => $self->{_IMAP4}->{port}, timeout => $self->{_IMAP4}->{timeout} );
unless ( defined $email ) {
$$asnmtapInherited->pluginValues ( { stateValue => $ERRORS{UNKNOWN}, error => "Cannot connect to IMAP4 server: $self->{_IMAP4}->{imap4}, $Net::IMAP::Simple::errstr" }, $TYPE{APPEND} );
return ( $ERRORS{UNKNOWN} );
}
unless ( $email->login( $self->{_IMAP4}->{username}, $self->{_IMAP4}->{password} ) ){
my $errstr = $email->errstr; $errstr =~ s/[\n\r]/ /g; $errstr =~ s/ +$//g;
$$asnmtapInherited->pluginValues ( { stateValue => $ERRORS{UNKNOWN}, error => "Cannot login to IMAP4 server: $self->{_IMAP4}->{imap4}, $errstr" }, $TYPE{APPEND} );
return ( $ERRORS{UNKNOWN} );
}
$numberOfMails = $email->select ( 'INBOX' );
unless ( defined $numberOfMails ) {
my $errstr = $email->errstr; $errstr =~ s/[\n\r]/ /g; $errstr =~ s/ +$//g;
$$asnmtapInherited->pluginValues ( { stateValue => $ERRORS{UNKNOWN}, error => "Cannot select my INBOX on IMAP4 server: $self->{_IMAP4}->{imap4}, $errstr" }, $TYPE{APPEND} );
return ( $ERRORS{UNKNOWN} );
}
} elsif ( defined $self->{_POP3}->{pop3} ) {
unless ( defined $self->{_POP3}->{username} ) {
$$asnmtapInherited->pluginValues ( { stateValue => $ERRORS{UNKNOWN}, error => 'Missing Mail POP3 parameter username' }, $TYPE{APPEND} );
return ( $ERRORS{UNKNOWN} );
}
unless ( defined $self->{_POP3}->{password} ) {
$$asnmtapInherited->pluginValues ( { stateValue => $ERRORS{UNKNOWN}, error => 'Missing Mail POP3 parameter password' }, $TYPE{APPEND} );
return ( $ERRORS{UNKNOWN} );
}
use Mail::POP3Client;
$email = Mail::POP3Client->new ( HOST => $self->{_POP3}->{pop3}, PORT => $self->{_POP3}->{port}, USER => $self->{_POP3}->{username}, PASSWORD => $self->{_POP3}->{password}, TIMEOUT => $self->{_POP3}->{timeout} ); # , DEBUG => ( $self->{_POP3}->{d...
$numberOfMails = $email->Count();
unless ( defined $numberOfMails and $numberOfMails != -1 ) {
$$asnmtapInherited->pluginValues ( { stateValue => $ERRORS{UNKNOWN}, error => "Cannot connect/login to POP3 server: $self->{_POP3}->{pop3}" }, $TYPE{APPEND} );
return ( $ERRORS{UNKNOWN} );
}
} else {
$$asnmtapInherited->pluginValues ( { stateValue => $ERRORS{UNKNOWN}, error => 'NO EMAIL CLIENT SPECIFIED !!!' }, $TYPE{APPEND} );
return ( $ERRORS{UNKNOWN} );
}
if ( defined $numberOfMails ) {
my $returnCode = $ERRORS{DEPENDENT};
$self->{defaultArguments}->{numberOfMatches} = 0;
if ( $numberOfMails ) {
use MIME::Parser;
my $parser = new MIME::Parser;
$parser->output_to_core(1);
$parser->decode_bodies(1);
use constant HEADER => '<?xml version="1.0" encoding="UTF-8"?>';
use constant SYSTEM => 'dtd/FingerprintEmail-1.0.dtd';
use constant FOOTER => '</FingerprintEmail>';
my $fingerprintXML = HEADER .'<!DOCTYPE FingerprintEmail SYSTEM "'. SYSTEM .'"><FingerprintEmail>';
my $debug = $$asnmtapInherited->getOptionsValue ('debug');
my $label;
for( my $msgnum = 1; $msgnum <= $numberOfMails; $msgnum++ ) {
print "\n", ref ($self), "::receiving_fingerprint_mails(): message number $msgnum\n" if ( $debug );
my ($fromNotFound, $toNotFound, $subjectNotFound, $fingerprintFound) = (1, 1, 1, 3);
my ($messageNotFound, $brandingNotFound, $timestampNotFound, $statusNotFound, $xmlNotFound) = (0, 0, 0, 0, 0);
if ( $parms{checkFingerprint} ) {
$statusNotFound = 1;
if ( $self->{_mailType} ) {
($xmlNotFound, $fingerprintFound) = (1, $fingerprintFound + 2);
} else {
($messageNotFound, $brandingNotFound, $timestampNotFound, $fingerprintFound) = (1, 1, 1, $fingerprintFound + 4);
}
}
$self->{defaultArguments}->{result} = '';
my $msgbuffer;
if ( defined $self->{_IMAP4}->{imap4} ) {
$msgbuffer = $email->top ( $msgnum );
} elsif ( defined $self->{_POP3}->{pop3} ) {
$msgbuffer = $email->Head ( $msgnum );
}
my $entity = $parser->parse_data( $msgbuffer );
my $head = $entity->head;
$head->unfold;
if ( $debug >= 2 ) {
print ref ($self), "::receiving_fingerprint_mails(): Header\n", $head->stringify, "\n\n";
print ref ($self), "::receiving_fingerprint_mails(): MIME-Version: ", $head->get ('MIME-Version'), "\n";
print ref ($self), "::receiving_fingerprint_mails(): MIME-Type: ", $head->mime_type, "\n";
print ref ($self), "::receiving_fingerprint_mails(): MIME-Encoding: ", $head->mime_encoding, "\n";
print ref ($self), "::receiving_fingerprint_mails(): Content-Type Charset: ", $head->mime_attr ('content-type.charset'), "\n"if ( $head->mime_attr('content-type.charset') );
print ref ($self), "::receiving_fingerprint_mails(): Content-Type Name: ", $head->mime_attr('content-type.name'), "\n" if ( $head->mime_attr('content-type.name') );
print ref ($self), "::receiving_fingerprint_mails(): Multipart Boundary: ", $head->multipart_boundary, "\n" if ( $head->multipart_boundary );
}
print "\n", ref ($self), "::receiving_fingerprint_mails(): HEAD\n" if ($debug);
foreach my $msgline ( split (/[\n\r]/, $head->stringify) ) {
next unless ( $msgline );
if ( $fromNotFound ) {
if ($msgline =~ /^$self->{_text}->{from}/) {
print "From .... : $msgline\n" if ($debug);
$fromNotFound = ( $msgline !~ /^$self->{_text}->{from}\s+$self->{_mail}->{from}/ ? 1 : 0 );
my $label = $fromNotFound ? ' (?)' : '(match)';
print " $label : $self->{_text}->{from} $self->{_mail}->{from}\n" if ($debug);
unless ( $fromNotFound ) { $fingerprintFound--; next; }
}
}
( run in 0.677 second using v1.01-cache-2.11-cpan-39bf76dae61 )