A simple HTML mail for alerting

mon_sent_mail

A simple HTML mail as replacement for the default mail

Program name: mon_send_mail.pl

Author: Martin Fuerstenau martin.fuerstenau_at_oce.com

Date: 10 May 2012

Purpose:

  • Submitting alert HTML formatted emails emails from a *agios based monitor system to the contact (icinga,op5,opsview...)

Features of the program:

  • Simple replacement for standard construct (printf.....| mail)
  • Userdefined logo in mail
  • Colors freely definable
  • Clickable links to monitor.

License

License: GPL This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see .

History and Changes:

The plugin is a fork by Martin Fuerstenau (martin.fuerstenau@oce.com) of the original one nagios_send_service_mail.pl written by Frank Migge (support at frank4dd dot com) and Robert Brecht published May 20, 2015, (c)2012 Frank Migge. Opposit to Frank's plugin the intention was not to send all the informations from the monitor (including performance graphs see http://nagios.fm4dd.com/plugins/ for Frank's scripts) by mail. But it was unnecessary to reinvent the wheel. So a lot of codes was (re)used for this script..

  • 12 Mar 2017 M.Fuerstenau

    • Started with actual version 1.8
    • Removed all "unnecessary" stuff
    • Removed sending graphs for pnp4nagios
    • Removed sending graphs for nagiosgraph
    • Removed support for hostgroups
    • Removed support for servicegroups
    • Removed support for cc and bcc (doesn't make sense).
    • Removed debug and test function. Not necessary.
    • Removed supporting languages. English hard coded
    • Removed using supporting languages. English hard coded
    • Removed create_address() using supporting languages. English hard coded

    • Changed
    • Changed from global variables to "my", because using this the purpose of the variables can be documented better.
    • Reformatted code for better readability
    • Simplified variable names.
    • Changed from sending either HTML mail or text mail to a multipart mail containing both
    • Changedusing environment variables for handing over nagios macros ($SERVICESDESC$) etc.. THIS IS IMPORTANT BECAUSE USING THE VARIABLES CAN CAUSE PERFORMANCE ISSUES IN NAGIOS. Therefore this should be disabled in Nagios. With every run of a plugin the whole environment is exported to the plugin. Nightmare. All parameters will now be submitted using command line options.

    • Added
    • Option -t. This tells for the link to the monitor systeme whether Thruk will be used or the classical interface.
    • Added filtering out HTML code from service output for text mails
    • Added replaceing new line by
      for HTML mails
  • 14 Nov 2017 M.Fuerstenau
    • Added
    • Moved all definitions users can adopt to seperate configuration file

Prerequisites:

  • Perl and some of modules: Getopt::Long Mail::Sendmail Digest::MD5 qw(md5_hex) MIME::Base64 File::Temp File::Basename

  • System must be able to send mails

Installation & Configuration:

Place mon_send_mail.pl and mon_send_mail.cfg in a directory of your choice.

It is generally a bad idea to mix plugins deliverd by your monitoring systeme and third party plugins. It may be new for some but you can have more than one directory for plugins, configuration files etc..

If the configuration file is not located in the same directory as the program and doesn't have the same name as the program (.cfg instead of .pl) yuo must tell the program where to found via commandline option (see below).

monitoring.png can be placed and/or renamed wherever you want. You can use your own logo with your own name. The logo path will be configured in the .cfg file.

Configuration file

The configuration file is a piece of perl code. The main goal was to have all definitions a user must edit in a seperate file.

Please configure

  • Path to logo file
  • mail sender Remark: This should normally being a valid user able to get mails and not nagios@localhost Email adminstrators are mostly not amused when getting absence mails etc. which can be deployed to the sender.

The hash %NOTIFICATIONCOLOR contains the used colours. Feel free to change them.

Configuration/modifications in the code

Normally there is no nned to do this execpt one thing. I developed the script for Nagios 3.x using Thruk. So while there is an option (-t) to select the right HTML link generated into the mail for getting the right Nagios window in browser, this should be adopted for Nagios 4.x, Naemon, Icinga, Shinken... .

The code is located around line 279:

if (defined($servicedesc)) { if (defined($thruk)) { $NagURL_extinfo = $NagURL . "thruk/cgi-bin/extinfo.cgi?type=2&host="; } else { $NagURL_extinfo = $NagURL . "nagios/cgi-bin/extinfo.cgi?type=2&host="; } } else { if (defined($thruk)) { $NagURL_extinfo = $NagURL . "thruk/cgi-bin/extinfo.cgi?type=1&host="; } else { $NagURL_extinfo = $NagURL . "nagios/cgi-bin/extinfo.cgi?type=1&host="; } }

if (defined($thruk)) { $NagURL_status = $NagURL . "thruk/cgi-bin/status.cgi?host="; } else { $NagURL_status = $NagURL . "nagios/cgi-bin/status.cgi?host="; }

This should be easy to adopt by copying parts from the URL from your browser.

PLEASE SEND ME YOUR MODIFICATION FOR OTHER MONITORS SO I CAN MODIFY THE PROGRAM!!!

Sample monitor command definition

define command{ command_name notify-by-email command_line /usr/lib/nagios/send_mail/mon_send_mail.pl -N monitor-ac.oce.net -s -t --hostname=$HOSTNAME$ --hostalias=$HOSTALIAS$ --hostaddress=$HOSTADDRESS$ -r $CONTACTEMAIL$ --notificationtype=$NOTIFICATIONTYPE$ --notificationauthor="$NOTIFICATIONAUTHOR$" --notificationcmt="$NOTIFICATIONCOMMENT$" --servicedesc="$SERVICEDESC$" --serviceoutput="$SERVICEOUTPUT$\n$LONGSERVICEOUTPUT$" --state=$SERVICESTATE$ --datetime="$SHORTDATETIME$" }

Command reference

Monitor system mail notification script, version 2.0.0 GPL licence, (c)2012,2015 Frank Migge, (c)2017 Martin Fuerstenau

Usage: ./mon_send_mail2.pl [-V|--version] or Usage: ./mon_send_mail2.pl [-h|--help] or Usage: ./mon_send_mail2.pl [-c, --configuration=] [-S|--smtphost ] -N|--nagios
-r|--recipients
--notificationtype
[--datetime ] [--hostaddress ] [--hostname ] [--hostalias ] [-t|--thruk] [-s|--ssl] [--notificationauthor ] [--notificationcmt ] [--servicedesc ] [--servicedispname ] [--serviceoutput ] [--longserviceoutput ]

This script takes over email notifications by receiving the monitor system state information, formatting the email and sending it out through an SMTP gateway.

-V, --version Prints version number. -h, --help Print this help message.

-c, --configuration= Path to configuration file Default will be path of the script and script name without .pl and .cfg instead.

                                          Example:
                                          foo.pl -> foo.cfg

-S, --smtphost= Name or IP address of SMTP gateway. -N, --nagios= Name of the monitor host (i.e. monitor.mydomain.net) -r, --recipients Comma-separated list of all contact mail addresses that are being notified about the host or service.

--notificationtype=notificationtype       Nagios notificationtype.A string identifying
                                          the type of notification that is being sent:
                                          - PROBLEM
                                          - RECOVERY
                                          - ACKNOWLEDGEMENT
                                          - FLAPPINGSTART
                                          - FLAPPINGSTOP
                                          - FLAPPINGDISABLED
                                          - DOWNTIMESTART
                                          - DOWNTIMEEND
                                          - DOWNTIMECANCELLED

--datetime=                     Nagios datetime (long or short as handed over).
--hostaddress=               Address of the host. This value is taken from the
                                          address directive in the host definition.
--hostname=                     Short name for the host (i.e. "biglinuxbox").
                                          This value is taken from the host_name directive in
                                          the host definition.
--hostalias=                   Nagios hostalias.Long name/description for the host.
                                          This value is taken from the alias directive in
                                          the host definition.

-t | --thruk If set use Thruk for links to Nagios instead of classical view. -s | --ssl Use https instead of http.

--notificationauthor=notificationauthor    A string containing the name of the user who authored
                                         the notification. If the $NOTIFICATIONTYPE$ macro is
                                         set to "DOWNTIMESTART" or "DOWNTIMEEND", this will
                                         be the name of the user who scheduled downtime for the
                                         host or service. If the $NOTIFICATIONTYPE$ macro is
                                         "ACKNOWLEDGEMENT", this will be the name of the user
                                         who acknowledged the host or service problem. If the
                                         $NOTIFICATIONTYPE$ macro is "CUSTOM", this will be
                                         name of the user who initated the custom host or service
                                         notification.
--notificationcmt=notificationcmt        A string containing the comment that was entered by the
                                         notification author. If the $NOTIFICATIONTYPE$ macro
                                         is set to "DOWNTIMESTART" or "DOWNTIMEEND", this will
                                         be the comment entered by the user who scheduled downtime
                                         for the host or service. If the $NOTIFICATIONTYPE$ macro
                                         is "ACKNOWLEDGEMENT", this will be the comment entered
                                         by the user who acknowledged the host or service problem.
                                         If the $NOTIFICATIONTYPE$ macro is "CUSTOM", this will
                                         be comment entered by the user who initated the custom host
                                         or service notification.
--servicedesc=servicedesc                Nagios service description.The long name/description of
                                         the service (i.e. "Main Website"). This value is taken
                                         from the service_description directive of the service
                                         definition.
--servicedispname=servicedisplayname     An alternate display name for the service. This value is
                                         taken from the display_name directive in the service definition.
--serviceoutput=serviceoutput            The first line of text output from the last service check
                                         (i.e. "Ping OK").
--longserviceoutput=longserviceoutput    The full text output (aside from the first line) from the
                                         last service check.
--state=state                            Nagios service state or host state.