1 |
racvision |
193 |
#!/usr/bin/perl -w |
2 |
|
|
# |
3 |
|
|
# Copyright (c) 2002-2004 Stéphane Urbanovski <stephane.urbanovski@ac-nancy-metz.fr> |
4 |
|
|
# |
5 |
|
|
# This program is free software; you can redistribute it and/or |
6 |
|
|
# modify it under the terms of the GNU General Public License |
7 |
|
|
# as published by the Free Software Foundation; either version 2 |
8 |
|
|
# of the License, or (at your option) any later version. |
9 |
|
|
# |
10 |
|
|
# This program is distributed in the hope that it will be useful, |
11 |
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty |
12 |
|
|
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13 |
|
|
# GNU General Public License for more details. |
14 |
|
|
# |
15 |
|
|
# you should have received a copy of the GNU General Public License |
16 |
|
|
# along with this program (or with Nagios); if not, write to the |
17 |
|
|
# Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
18 |
|
|
# Boston, MA 02111-1307, USA |
19 |
|
|
# |
20 |
|
|
# |
21 |
|
|
|
22 |
|
|
use strict; # should never be differently :-) |
23 |
|
|
use warnings; |
24 |
|
|
|
25 |
|
|
use File::Basename; # get basename() |
26 |
|
|
use lib dirname($0); # to get local libs |
27 |
|
|
use libplugins qw(:DEFAULT ); |
28 |
|
|
|
29 |
|
|
use Net::SMTP; |
30 |
|
|
use Sys::Hostname; |
31 |
|
|
use Time::Local; # for date conversions |
32 |
|
|
|
33 |
|
|
use POSIX qw(strftime); |
34 |
|
|
|
35 |
|
|
#use Data::Dumper; # debug tool |
36 |
|
|
|
37 |
|
|
my $DEBUG=0; |
38 |
|
|
|
39 |
|
|
# Default values : |
40 |
|
|
my %DEFVALUES = ( |
41 |
|
|
'VERSION' => { |
42 |
|
|
'v' => "1.2", |
43 |
|
|
'desc' => _("Plugin Version"), |
44 |
|
|
}, |
45 |
|
|
); |
46 |
|
|
|
47 |
|
|
# Get argument : |
48 |
|
|
use vars qw( $opt_V $opt_h $opt_m ); |
49 |
|
|
use vars qw( $warn $crit $smtp_server $mail_sender $mail_addr $pop_key); |
50 |
|
|
|
51 |
|
|
Getopt::Long::GetOptions ( |
52 |
|
|
"V" => \$opt_V, "version" => \$opt_V, |
53 |
|
|
"h|?" => \$opt_h, "help" => \$opt_m, |
54 |
|
|
"man" => \$opt_m, |
55 |
|
|
"d" => \$DEBUG, "debug=i" => \$DEBUG, |
56 |
|
|
|
57 |
|
|
"w=i" => \$warn, "warning=i" => \$warn, |
58 |
|
|
"c=i" => \$crit, "critical=i"=> \$crit, |
59 |
|
|
|
60 |
|
|
"H=s" => \$smtp_server, "host=s" => \$smtp_server, |
61 |
|
|
"s=s" => \$mail_sender, "sender=s" => \$mail_sender, |
62 |
|
|
"m=s" => \$mail_addr, "mail=s" => \$mail_addr, |
63 |
|
|
"k=s" => \$pop_key, "key=s" => \$pop_key, |
64 |
|
|
); |
65 |
|
|
|
66 |
|
|
my $state = "UNKNOWN"; |
67 |
|
|
my $answer = ""; |
68 |
|
|
|
69 |
|
|
|
70 |
|
|
if ( defined ($opt_h) || defined ($opt_m) ) { |
71 |
|
|
&showUsage($opt_m,\%DEFVALUES); |
72 |
|
|
} elsif (defined ($opt_V)) { |
73 |
|
|
&showVersion($DEFVALUES{VERSION}{v}); |
74 |
|
|
} |
75 |
|
|
|
76 |
|
|
if ( (!defined ($smtp_server)) || ($smtp_server eq "")) { |
77 |
|
|
print _("Missing 'smtp server' parameter !")."\n"; |
78 |
|
|
&showUsage(); |
79 |
|
|
exit $EXIT_CODES{$state}; |
80 |
|
|
} |
81 |
|
|
if ( (!defined ($mail_addr)) || ($mail_addr eq "")) { |
82 |
|
|
print _("Missing 'mail address' parameter !")."\n"; |
83 |
|
|
&showUsage(); |
84 |
|
|
exit $EXIT_CODES{$state}; |
85 |
|
|
} |
86 |
|
|
|
87 |
|
|
$pop_key = $pop_key || $smtp_server; |
88 |
|
|
|
89 |
|
|
my $hostname = hostname; |
90 |
|
|
|
91 |
|
|
$mail_sender = $mail_sender || $mail_addr || $ENV{USER}."@".$hostname ; |
92 |
|
|
my $mail_sender_full = $mail_sender; |
93 |
|
|
if ( $mail_sender !~ /<.*>/ ) { |
94 |
|
|
$mail_sender_full = "Racvision mailler <".$mail_sender.">"; |
95 |
|
|
} |
96 |
|
|
|
97 |
|
|
#$warn = $warn || 20; |
98 |
|
|
#$crit = $crit || 15; |
99 |
|
|
|
100 |
|
|
$state = "CRITICAL"; |
101 |
|
|
|
102 |
|
|
if ($DEBUG) { |
103 |
|
|
print "DEBUG: smtp_server='$smtp_server' mailaddr='$mail_addr' pop_key='$pop_key'\n" |
104 |
|
|
} |
105 |
|
|
|
106 |
|
|
|
107 |
|
|
$state = "OK"; |
108 |
|
|
$answer = sprintf(_("Message (key %s) successfully sended."),$pop_key); |
109 |
|
|
|
110 |
|
|
|
111 |
|
|
my $smtp = Net::SMTP->new($smtp_server, Debug => $DEBUG); |
112 |
|
|
|
113 |
|
|
if ($smtp) { |
114 |
|
|
$smtp->mail($mail_sender); |
115 |
|
|
$smtp->to($mail_addr); |
116 |
|
|
$smtp->data(); |
117 |
|
|
$smtp->datasend("To: $mail_addr\n"); |
118 |
|
|
$smtp->datasend("From: $mail_sender_full\n"); |
119 |
|
|
$smtp->datasend("Subject: $pop_key\n"); |
120 |
|
|
$smtp->datasend("\n"); |
121 |
|
|
$smtp->datasend("PING!\n\n"); |
122 |
|
|
$smtp->datasend("Message de test de messagerie.\n\n"); |
123 |
|
|
$smtp->datasend("Clef: $pop_key\n\n"); |
124 |
|
|
$smtp->datasend("Date: ".&getDate()."\n\n"); |
125 |
|
|
$smtp->dataend(); |
126 |
|
|
$smtp->quit; |
127 |
|
|
|
128 |
|
|
} else { |
129 |
|
|
$state = "CRITICAL"; |
130 |
|
|
$answer = sprintf(_("Last message '%s' could not be sended !"),$pop_key); |
131 |
|
|
} |
132 |
|
|
|
133 |
|
|
|
134 |
|
|
sub getDate { |
135 |
|
|
return strftime("%A %e %B %Y %H:%M:%S", localtime(time())) |
136 |
|
|
} |
137 |
|
|
|
138 |
|
|
print $answer."\n"; |
139 |
|
|
exit $EXIT_CODES{$state}; |
140 |
|
|
|
141 |
|
|
|
142 |
|
|
|
143 |
|
|
|
144 |
|
|
__END__ |
145 |
|
|
|
146 |
|
|
=head1 NAME |
147 |
|
|
|
148 |
|
|
This plugins send mail used by check_mail_pop3.pl. |
149 |
|
|
|
150 |
|
|
=head1 SYNOPSIS |
151 |
|
|
|
152 |
|
|
B<check_mail_smtp.pl> S<-H I<smtp server>> S<-m I<mail address>> [S<-k I<key>>] [S<-s I<sender mail>>] |
153 |
|
|
|
154 |
|
|
=head1 DESCRIPTION |
155 |
|
|
|
156 |
|
|
Nagios plugins to check smtp server. |
157 |
|
|
This plugins also allow you to periodicaly send a mail that could be checked by check_mail_pop3.pl Nagios plugin. |
158 |
|
|
|
159 |
|
|
=head1 OPTIONS |
160 |
|
|
|
161 |
|
|
=over 4 |
162 |
|
|
|
163 |
|
|
=item B<-H> I<smtp server> |
164 |
|
|
|
165 |
|
|
The SMTP mail server. |
166 |
|
|
|
167 |
|
|
=item B<-m> I<mail address> |
168 |
|
|
|
169 |
|
|
The mail address we used for our tests. |
170 |
|
|
|
171 |
|
|
=item B<-k> I<key> |
172 |
|
|
|
173 |
|
|
This is a key used in message subject that will be used by check_mail_pop3.pl. |
174 |
|
|
|
175 |
|
|
=item B<-s> I<sender mail> |
176 |
|
|
|
177 |
|
|
Sender mail address. Default to <mail address>. |
178 |
|
|
|
179 |
|
|
=back |
180 |
|
|
|
181 |
|
|
=head1 NAGIOS CONGIGURATIONS |
182 |
|
|
|
183 |
|
|
In F<checkcommands.cfg> you have to add : |
184 |
|
|
|
185 |
|
|
# 'check_mail_smtp' |
186 |
|
|
# @param $ARG1$ mail address |
187 |
|
|
# @param $ARG2$ key |
188 |
|
|
define command { |
189 |
|
|
command_name check_mail_smtp |
190 |
|
|
command_line $USER1$/check_mail_smtp.pl -H $HOSTADDRESS$ -m $ARG1$ -k $ARG2$ |
191 |
|
|
} |
192 |
|
|
|
193 |
|
|
=head1 AUTHOR |
194 |
|
|
|
195 |
|
|
Stéphane Urbanovski <stephane.urbanovski@ac-nancy-metz.fr> |
196 |
|
|
|
197 |
|
|
=cut |