1. point an email address at your server. eg; nagios@yourserver.com
2. add a pipe to /etc/aliases;
eg;
nagios: "| /usr/local/nagios/libexec/eventhandlers/emailhandler.php"
3. run newaliases to rebuild alias file
4. add a symbolic link from /etc/smrsh to the script
eg
ln -s /usr/local/nagios/libexec/eventhandlers/emailhandler.php /etc/smrsh/emailhandler.php
emailhandler.php:
#!/usr/bin/php
<?php ################################### # emailhandler.php # # ensure this command has setuid on # chmod u+s <command. # ###################################
function parse_subject($subject) { global $ishost, $isservice;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$bits = explode(" ", $subject);
if ($bits[1] == 'HOST')
$ishost = true;
else
$isservice = true;
unset($bits[0]);
unset($bits[1]);
if ($ishost)
{
return(array($bits[3]));
} else {
$host = $bits[2];
unset($bits[2]);
$service = implode(" ", $bits);
return(array($host, $service));
} }
function parse_sender($from) { $bits = split(“<|>
”, $from);
foreach($bits as $bit)
{
# strip out the sender
if (eregi("EMAILADDRESS.com", $bit))
return $bit;
}
}
// read from stdin
$fd = fopen("php://stdin", "r");
$email = "";
while (!feof($fd)) {
$email .= fread($fd, 1024);
}
fclose($fd);
$log = fopen("/tmp/incomingemail.log", "a+");
#fputs($log, "----- ORIGINAL -----\n");
#fputs($log, $email);
#fputs($log, "----- END ORIGINAL -----\n\n\n");
// handle email
$lines = explode("\n", $email);
// empty vars
$from = "";
$subject = "";
$headers = "";
$message = "";
$splittingheaders = true;
$message_complete = false;
$commandfile = '/usr/local/nagios/var/rw/nagios.cmd';
$now = time();
for ($i=0; $i < count($lines); $i++) {
if (eregi("Original Message", $lines[$i]))
$message_complete = true;
if (!$message_complete)
{
if ($splittingheaders) {
// this is a header
$headers .= $lines[$i]."\n";
// look out for special headers
if (preg_match("/^Subject: (.*)/", $lines[$i], $matches)) {
$subject_array = parse_subject($matches[1]);
$hostname = $subject_array[0];
}
if (preg_match("/^From: (.*)/", $lines[$i], $matches)) {
$from = parse_sender($matches[1]);
}
} else {
// not a header, but message
$message .= $lines[$i]."\n";
}
if (trim($lines[$i])=="") {
// empty line, header section has ended
$splittingheaders = false;
}
}
}
$message .= " (ACK via email)";
$message = trim($message);
$message = ereg_replace("\r|\n", " ", $message);
if ($isservice)
{
$service = $subject_array[1];
$ack_cmd = '/usr/bin/printf "['.$now.'] ACKNOWLEDGE_SVC_PROBLEM;'.$hostname.';'.$service.';1;1;1;'.$from.';'.$message.'\n" > /usr/local/nagios/var/rw/nagios.cmd';
}
if ($ishost)
{
$ack_cmd = '/usr/bin/printf "['.$now.'] ACKNOWLEDGE_HOST_PROBLEM;'.$hostname.';1;1;1;'.$from.';'.$message.'\n" > /usr/local/nagios/var/rw/nagios.cmd';
}
fputs($log, "Running: \n$ack_cmd\n\n");
$output = shell_exec($ack_cmd." 2>&1");
fputs($log, $output);
fclose($log);
?>