====== HTML Mail Alert ====== ^ Author | [[wardmw@gmail.com|Martin Ward]] | ^ Compatibility | Xymon 4.2 | ^ Requirements | Perl, MIME::Lite | ^ Download | None | ^ Last Update | 2008-07-08 | ===== Description ===== ===== Installation ===== - Place html_mail.pl in the ext/ directory in your xymon sever installation. -Make the script executable: chmod 755 html_mail.pl - Add the following line in whichever alert for which you want messages SCRIPT [XYMON_SERVER_ROOT]/ext/html_mail.pl [RECIPIENT] FORMAT=PLAIN - And of course you replaced [XYMON_SERVER_ROOT] with the full path to your xymon server directory. ===== Source ===== === html_mail.pl === #!/usr/bin/perl -w # This perl script was taken from a shell/perl script combo that was originally # authored by Andy France. # I have modified it so that the workings of the shell script are done inside # the perl script, thus removing one file and speeding up to processing. # # This script require the MIME::Lite Perl module, availablde from CPAN here: # http://search.cpan.org/~rjbs/MIME-Lite-3.021/lib/MIME/Lite.pm # # Don't forget to update the first line in this script to point to the # correct location for your Perl executable. # # This script should be installed in a known location and the following line # added to the hobbit-alerts.cfg file: # SCRIPT /opt/hobbit/server/ext/html_mail support@email.com FORMAT=PLAIN # # Version Author Details # ------- ------ ------- # 1.0 Martin Ward Initial version. See code for details. ############################################################################### # Uses and requires use strict; use MIME::Lite; ############################################################################### # Global variables my $RCPT; # The recipient's email address. my $BBHOSTSVC; # HOSTNAME.SERVICE that the alert is about. my $BBCOLORLEVEL; # The current color of the status. my $HTML_BODY; # Holds the text for the BODY tag. my $BBALPHAMSG; # The full text of the status log triggering the alert my $BBHTMLMSG; # The full HTML text of the status log triggering the alert my $ACKCODE; # The "cookie" that can be used to acknowledge the alert my $BBHOSTNAME; # The name of the host that the alert is about my $MACHIP; # The IP-address of the host that has a problem my $BBSVCNAME; # The name of the service that the alert is about my $BBSVCNUM; # The numeric code for the service. From SVCCODES definition. my $BBHOSTSVCCOMMAS; # As BBHOSTSVC, but dots in the hostname replaced # with commas. my $BBNUMERIC; # A 22-digit number made by BBSVCNUM, MACHIP and ACKCODE. my $RECOVERED; # Is "1" if the service has recovered. my $EVENTSTART; # Timestamp when the current status (color) began my $DOWNSECS; # Number of seconds the service has been down. my $DOWNSECSMSG; # When recovered, holds the text "Event duration : N" # where N is the DOWNSECS value. my $CFID; # Line-number in the hobbit-alerts.cfg file that caused the # script to be invoked. Can be useful when troubleshooting # alert configuration rules. ############################################################################### # send_email - Creates a MIME-compatible email using $HTML_BODY, which we # created in another subroutine, and $BBALPHAMSG, which is the plain text # version. It then adds in any icons required to display the MIME email # and sends it off. sub send_email { my $subject = $BBHOSTSVC . " " . $BBCOLORLEVEL; my $htmldata = join("", "$HTML_BODY\n", "\n", "
\n",
                $BBHTMLMSG,
                "\n",
                "
\n", "
\n", "" ); # Create the MIME email my $msg = MIME::Lite->new ( Subject => $subject, To => $RCPT, Type => 'multipart/mixed' # Type => 'multipart/related' ); # Attach the HTML version of the email. $msg->attach ( Type => 'text/html', Data => $htmldata, ); # attach the plain text version of the email. $msg->attach ( Type => 'TEXT', Data => $BBALPHAMSG, ); # attach all icons required by the web page version. if($htmldata =~ m/blue.gif/) {$msg->attach(Type => 'image/gif', Id => 'blue.gif', Path => '/opt/hobbit/server/www/gifs/blue.gif')} if($htmldata =~ m/clear.gif/) {$msg->attach(Type => 'image/gif', Id => 'clear.gif', Path => '/opt/hobbit/server/www/gifs/clear.gif')} if($htmldata =~ m/green.gif/) {$msg->attach(Type => 'image/gif', Id => 'green.gif', Path => '/opt/hobbit/server/www/gifs/green.gif')} if($htmldata =~ m/purple.gif/) {$msg->attach(Type => 'image/gif', Id => 'purple.gif', Path => '/opt/hobbit/server/www/gifs/purple.gif')} if($htmldata =~ m/red.gif/) {$msg->attach(Type => 'image/gif', Id => 'red.gif', Path => '/opt/hobbit/server/www/gifs/red.gif')} if($htmldata =~ m/yellow.gif/) {$msg->attach(Type => 'image/gif', Id => 'yellow.gif', Path => '/opt/hobbit/server/www/gifs/yellow.gif')} if($htmldata =~ m/bkg-red.gif/) {$msg->attach(Type => 'image/gif', Id => 'bkg-red.gif', Path => '/opt/hobbit/server/www/gifs/bkg-red.gif')} if($htmldata =~ m/bkg-yellow.gif/) {$msg->attach(Type => 'image/gif', Id => 'bkg-yellow.gif', Path => '/opt/hobbit/server/www/gifs/bkg-yellow.gif')} if($htmldata =~ m/bkg-purple.gif/) {$msg->attach(Type => 'image/gif', Id => 'bkg-purple.gif', Path => '/opt/hobbit/server/www/gifs/bkg-purple.gif')} if($htmldata =~ m/bkg-blue.gif/) {$msg->attach(Type => 'image/gif', Id => 'bkg-blue.gif', Path => '/opt/hobbit/server/www/gifs/bkg-blue.gif')} if($htmldata =~ m/bkg-green.gif/) {$msg->attach(Type => 'image/gif', Id => 'bkg-green.gif', Path => '/opt/hobbit/server/www/gifs/bkg-green.gif')} if($htmldata =~ m/bkg-clear.gif/) {$msg->attach(Type => 'image/gif', Id => 'bkg-clear.gif', Path => '/opt/hobbit/server/www/gifs/bkg-clear.gif')} # Send the email. $msg->send(); } ############################################################################### # parse_info - This code will reformat $BBHTMLMSG to make it HTML-like. sub parse_info { my $BBCOLOR; # # If RECOVERED == 1 then color=green # if ($RECOVERED eq "1") { $BBCOLORLEVEL = "green"; $HTML_BODY=''; } else { # # Try and figure out what colour we should set the background # to. # if ($BBHTMLMSG =~ m/&red/) { $BBCOLORLEVEL = "red"; $HTML_BODY=''; } elsif ($BBHTMLMSG =~ m/&yellow/) { $BBCOLORLEVEL = "yellow"; $HTML_BODY=''; } elsif ($BBHTMLMSG =~ m/&purple/) { $BBCOLORLEVEL = "purple"; $HTML_BODY=''; } elsif ($BBHTMLMSG =~ m/&blue/) { $BBCOLORLEVEL = "blue"; $HTML_BODY=''; } elsif ($BBHTMLMSG =~ m/&green/) { $BBCOLORLEVEL = "green"; $HTML_BODY=''; } else { $BBCOLORLEVEL = "clear"; $HTML_BODY=''; } } # # Convert Xymon colour tags to embedded image tags # $BBHTMLMSG =~ s/&red//g; $BBHTMLMSG =~ s/&yellow//g; $BBHTMLMSG =~ s/&purple//g; $BBHTMLMSG =~ s/&blue//g; $BBHTMLMSG =~ s/&clear//g; $BBHTMLMSG =~ s/&green//g; $BBHTMLMSG =~ s/&unknown//g; # # Fix link at base of message as they are removed in PLAIN format # $BBHTMLMSG =~ s/(http:.*)/$1<\/a>/g; } ############################################################################### # Start of main code # # Retrieve the data from the environment variables # $ACKCODE = $ENV{'ACKCODE'}; $ACKCODE = "" if (! defined($ACKCODE)); $BBALPHAMSG = $ENV{'BBALPHAMSG'}; $BBALPHAMSG = "" if (! defined($BBALPHAMSG)); $BBHTMLMSG = $BBALPHAMSG; $BBCOLORLEVEL = $ENV{'BBCOLORLEVEL'}; $BBCOLORLEVEL = "" if (! defined($BBCOLORLEVEL)); $BBHOSTNAME = $ENV{'BBHOSTNAME'}; $BBHOSTNAME = "" if (! defined($BBHOSTNAME)); $BBHOSTSVC = $ENV{'BBHOSTSVC'}; $BBHOSTSVC = "" if (! defined($BBHOSTSVC)); $BBHOSTSVCCOMMAS = $ENV{'BBHOSTSVCCOMMAS'}; $BBHOSTSVCCOMMAS = "" if (! defined($BBHOSTSVCCOMMAS)); $BBNUMERIC = $ENV{'BBNUMERIC'}; $BBNUMERIC = "" if (! defined($BBNUMERIC)); $BBSVCNAME = $ENV{'BBSVCNAME'}; $BBSVCNAME = "" if (! defined($BBSVCNAME)); $BBSVCNUM = $ENV{'BBSVCNUM'}; $BBSVCNUM = "" if (! defined($BBSVCNUM)); $CFID = $ENV{'CFID'}; $CFID = "" if (! defined($CFID)); $DOWNSECS = $ENV{'DOWNSECS'}; $DOWNSECS = "" if (! defined($DOWNSECS)); $DOWNSECSMSG = $ENV{'DOWNSECSMSG'}; $DOWNSECSMSG = "" if (! defined($DOWNSECSMSG)); $EVENTSTART = $ENV{'EVENTSTART'}; $EVENTSTART = "" if (! defined($EVENTSTART)); $MACHIP = $ENV{'MACHIP'}; $MACHIP = "" if (! defined($MACHIP)); $RCPT = $ENV{'RCPT'}; $RCPT = "" if (! defined($RCPT)); $RECOVERED = $ENV{'RECOVERED'}; $RECOVERED = "0" if (! defined($RECOVERED)); # # Rewrite the data # parse_info; # # Send the email # send_email; 0;
===== Known Bugs and Issues ===== ===== To Do ===== ===== Credits ===== ===== Changelog ===== * **2008-07-08** * Initial release