#!/bin/bash
# License Agreement: Free to use and modify
# Modification date: 1/31/07
# mailer.sh - Mailer Script    
# Version 1.1
# Purpose: Send an SMTP Message, teach BASH Shell Scripting
# Author: Tay Kratzer taykratzer@taykratzer.com
# Download location: http://www.taykratzer.com/linux

#  NOTE: TO MAKE THIS SCRIPT EXECUTABLE ON LINUX
#  type in the command:  chmod  777 mailer.sh


# These are internal variables to the script
PROC_SH="mailer.sh"
PROCU="MAILERSH"

# These are variables, called Integer Variables - Notice the "-i"
declare -i VERBOSE=0
declare -i HELP=0
declare -i GENERATE=0
declare -i USE_CONFFILE=0
declare -i RECIPIENT_OVERRIDE=0
declare -i SUBJECT_OVERRIDE=0
declare -i FROM_OVERRIDE=0
declare -i ATTACHMENT_OVERRIDE=0
declare -i MESSAGE_OVERRIDE=0


GENERATE=`echo $@ | grep -c "\-t"`
declare GENCONFFILE=NOGWRDARGS
declare CONFFILE=NOGWRDARGS


# The getopts command allows you to use switches with a BASH script

while getopts hc:t:vr:s:f:a:m: OPTION 2> /dev/null
do
     case ${OPTION} in
 
     c) CONFFILE=${OPTARG}
        USE_CONFFILE=1
        HELP=0
     ;;
     h) HELP=1;;
     t) GENERATE=1 
        GENCONFFILE=${OPTARG}
     ;;
     v) VERBOSE=1;;
     s) SUBJECT_OVERRIDE=1 
        SUBJECT_IN=${OPTARG};;
     r) RECIPIENT_OVERRIDE=1 
        TO_IN=${OPTARG};;
     f) FROM_OVERRIDE=1 
        FROM_IN=${OPTARG};;
     m) MESSAGE_OVERRIDE=1 
        MESSAGE_IN=${OPTARG};;
     a) ATTACHMENT_OVERRIDE=1 
        ATTACHMENT_IN=${OPTARG};;
     
    esac
done
 


	
if [ $GENERATE -gt 0 ]
then
	if [ $GENCONFFILE = NOGWRDARGS ]
	then 
	echo "You have requested to have a template configuration file generated."
	echo "You must specify the name of a template configuration file to generate."
	echo "For example: ./$PROC_SH -t /root/mailer.conf"
	exit 1
	else
	echo "" > /dev/null
	fi
	
declare -i GENCONFFILE_EXIST=0
ls $GENCONFFILE 1> /dev/null 2> /dev/null
GENCONFFILE_EXIST=`echo $?`
	if [ $GENCONFFILE_EXIST -eq 0 ]
	then
echo "A file already exists with that name, will not overwrite this file."
echo "Please specify a different file name."
	exit 1
	else
echo "" > /dev/null
	fi

declare -i GENCONFFILE_POSSIBLE=0
touch $GENCONFFILE 1> /dev/null 2> /dev/null
GENCONFFILE_POSSIBLE=`echo $?`
	if [ $GENCONFFILE_POSSIBLE -eq 0 ]
	then
echo "" > /dev/null
	else
echo "The file $GENCONFFILE cannot be created for some reason."
echo "Perhaps the path specified is incorrect."
echo "Or there is not sufficient rights to create the file."
	exit 1
	fi
echo ""
echo "Generating template file: $GENCONFFILE"
echo "## Author: Tay Kratzer taykratzer@taykratzer.com ##" > $GENCONFFILE
echo "## All values must be kept within double quotes. ##" >> $GENCONFFILE
echo "## FROM_ADDRESS - Is a Required Field. ##" >> $GENCONFFILE
echo "FROM_ADDRESS=\"joe@acme.com\""  >> $GENCONFFILE
echo "## TO_ADDRESS - Is a Required Field. ##" >> $GENCONFFILE
echo "TO_ADDRESS=\"joe@acme.com\"" >> $GENCONFFILE
echo "## MESSAGE_SUBJECT - Is a Required Field. ##" >> $GENCONFFILE
echo "MESSAGE_SUBJECT=\"Linux is Cool!\"" >> $GENCONFFILE
echo "## MESSAGE_BODY - Is a Required Field. ##" >> $GENCONFFILE
echo "MESSAGE_BODY=\"Just a note, to tell you I love Linux!\"" >> $GENCONFFILE
echo "## ATTACHMENT_FILE - Is NOT a Required Field. ##" >> $GENCONFFILE
echo "## If you do not want to specify an attachment,  ##" >> $GENCONFFILE
echo "## fill the ATTACHMENT_FILE with the word: unused  ##" >> $GENCONFFILE
echo "ATTACHMENT_FILE=\"/opt/beginfinite/reload/logs/event.log\"" >> $GENCONFFILE
echo ""
echo "Completed Generating Template file: $GENCONFFILE"
echo ""
ls -l $GENCONFFILE
echo ""
exit 0
fi

HELP_SCREEN ()
{
# This is a function called HELP_SCREEN

# Notice I am now using the integer "HELP" to determine whether or not to
# show the help section of this script

# If the -h switch is used with this script, that changes the HELP integer 
# from 0 to 1, which is what is being tested. 

if [ $HELP -eq 1 ]
then
echo "-----------------------------------------------------------------------"
echo "MAILERSH 1.0 - Mail from a a SLES9 or SLES10 Server."
echo "-----------------------------------------------------------------------"
echo "Usage: ./$PROC_SH <option>"
echo
echo "Script Options:"
echo "       -c = Path to a configuration file."
echo "       -t <filename> = Generate a template configuration file."
echo "       -h = This help screen."
echo ""
echo "Mailer Override Options"
echo "       -f = From (Sender) Override."
echo "       -r = Recipient (To:) Override."
echo "       -s = Subject Override."
echo "       -m = Message Override."
echo "       -a = Attachment Override."
echo "" 
echo ""
echo "Example: ./mailer.sh -r \"taykratzer@taykratzer.com\" -m \"Hello Tay\""
echo ""
echo "NOTE: values after switches should be contained in double quotes"
echo "" 
echo ""
echo ""
echo "This script assists the operator send an SMTP Message from a SLES9 or SLES10 server"
echo ""
echo ""
echo "A mailer daemon must be running for this feature to work"
exit 1
else
echo "" > /dev/null
fi

}

# Here I am calling the function HELP_SCREEN
HELP_SCREEN




	
if [ $CONFFILE = NOGWRDARGS ]
then
LOCAL_DIR=`pwd`
declare -i CONF_CHECK
CONF_CHECK=0
ls $LOCAL_DIR/mailer.conf
CONF_CHECK=`echo $?`
clear
if [ $CONF_CHECK -eq 0 ]
then
CONFFILE=$LOCAL_DIR/mailer.conf
else
echo "[$PROCU] No configuration file specified"
echo "[$PROCU] This script will make a .conf file for you to modify"
echo "[$PROCU] The *.conf file is called: mailer.conf"
echo "[$PROCU] HINT: You can specify a configuration file with a -c switch!"
echo 
echo "[$PROCU] EXAMPLE: ./mailer.sh -c /data/message1.conf"
echo ""
echo "## Author: Tay Kratzer taykratzer@taykratzer.com ##" > $LOCAL_DIR/mailer.conf
echo "## All values must be kept within double quotes. ##" >> $LOCAL_DIR/mailer.conf
echo "## FROM_ADDRESS - Is a Required Field. ##" >> $LOCAL_DIR/mailer.conf
echo "FROM_ADDRESS=\"joe@acme.com\""  >> $LOCAL_DIR/mailer.conf
echo "## TO_ADDRESS - Is a Required Field. ##" >> $LOCAL_DIR/mailer.conf
echo "TO_ADDRESS=\"joe@acme.com\"" >> $LOCAL_DIR/mailer.conf
echo "## MESSAGE_SUBJECT - Is a Required Field. ##" >> $LOCAL_DIR/mailer.conf
echo "MESSAGE_SUBJECT=\"Linux is Cool!\"" >> $LOCAL_DIR/mailer.conf
echo "## MESSAGE_BODY - Is a Required Field. ##" >> $LOCAL_DIR/mailer.conf
echo "MESSAGE_BODY=\"Just a note, to tell you I love Linux!\"" >> $LOCAL_DIR/mailer.conf
echo "## ATTACHMENT_FILE - Is not a Required Field. ##" >> $LOCAL_DIR/mailer.conf
echo "## If you do not want to specify an attachment,  ##" >> $LOCAL_DIR/mailer.conf
echo "## fill the ATTACHMENT_FILE with the word: unused  ##" >> $LOCAL_DIR/mailer.conf
echo "ATTACHMENT_FILE=\"/opt/beginfinite/reload/logs/event.log\"" >> $LOCAL_DIR/mailer.conf
echo ""

ls -l $LOCAL_DIR/mailer.conf
exit 1
fi
else
echo "" > /dev/null
fi

declare -i CONFFILE_UNCONFIGURED
CONFFILE_UNCONFIGURED=0
CONFFILE_UNCONFIGURED=`cat $CONFFILE | grep -c joe@acme.com` 2> /dev/null

if [ $CONFFILE_UNCONFIGURED -eq 1 ]
then 
echo "[$PROCU] Please configure your configuration file:"
echo 
ls -l $CONFFILE
echo 
echo "[$PROCU] It does not seem to be configured correctly"
echo 
echo "[$PROCU] HINT: You can specify a configuration file with a -c switch!"
echo 
echo "[$PROCU] EXAMPLE: ./mailer.sh -c /data/message1.conf "
echo 
echo 
exit 1
else
echo "" > /dev/null
fi

if [ $USE_CONFFILE -eq 1 ]
then
LOCALPATH=`pwd`
declare -i CONFFILE_LOCAL=0
ls $LOCALPATH/$CONFFILE 2> /dev/null 1> /dev/null
CONFFILE_LOCAL=`echo $?`
	if [ $CONFFILE_LOCAL -eq 0 ]
	then 
CONFFILE=$LOCALPATH/$CONFFILE
	else
echo "" > /dev/null
	fi
else
echo "" > /dev/null
fi

declare -i CONFFILE_EXISTS
ls $CONFFILE 2> /dev/null 1> /dev/null
CONFFILE_EXISTS=`echo $?`
if [ $CONFFILE_EXISTS -ne 0 ]
then
echo "The configuration file specified with a -c switch does not exist"
exit 1
else
echo "" > /dev/null
fi

declare -i CONFFILE_VALID=0
CONFFILE_VALID=`cat $CONFFILE | grep -c ADDRESS`
if [ $CONFFILE_VALID -lt 4 ]
then
echo "The configuration file specified with a -c switch,"
echo "is not a valid configuration file."
exit 1
else
echo "" > /dev/null
fi

BUILD_MESSAGE ()
{
# This is a function called BUILD_MESSAGE


# These are the required fields to send a message using this script
FROM_ADDRESS="joe@acme.com"
TO_ADDRESS="joe@acme.com"
MESSAGE_SUBJECT="empty"
MESSAGE_BODY="empty"
ATTACHMENT_FILE="unused"

# Here is am reading in a configuration file, where I read out the fields
# required to send a message  with this script
# This is called "sourcing" another file
. $CONFFILE


if [ $RECIPIENT_OVERRIDE -eq 1 ]
then
TO=`echo $TO_IN`
else
TO="$TO_ADDRESS"
fi

declare -i BOGUS_RECIPIENT=`echo $TO | grep -c "acme.com"`

if [ $BOGUS_RECIPIENT -gt 0 ]
then
echo "Please indicate a valid recipient, $TO is not valid"
exit 1
else
echo "" > /dev/null
fi



if [ $SUBJECT_OVERRIDE -eq 1 ]
then
SUBJECT=`echo $SUBJECT_IN`
else
SUBJECT="$MESSAGE_SUBJECT"
fi

if [ $FROM_OVERRIDE -eq 1 ]
then
FROM=`echo $FROM_IN`
else
FROM="$FROM_ADDRESS"
fi

if [ $MESSAGE_OVERRIDE -eq 1 ]
then
MESSAGE=`echo $MESSAGE_IN`
else
MESSAGE="$MESSAGE_BODY"
fi

if [ $ATTACHMENT_OVERRIDE -eq 1 ]
then
ATTACHMENT=`echo $ATTACHMENT_IN`
else
ATTACHMENT="$ATTACHMENT_FILE"
fi

}




function MAIL ()
{
# This is a function called MAIL

# Here I am calling the function "BUILD_MESSAGE"
# Note, a function being called must be above it's calling function
BUILD_MESSAGE


mkdir -p /tmp
MESSAGE_BODY_TEMP_FILE="/tmp/$$.mailer.tmp"
touch $MESSAGE_BODY_TEMP_FILE
echo "$MESSAGE" > $MESSAGE_BODY_TEMP_FILE

if [ $ATTACHMENT == unused ]
then
	
	if [ $VERBOSE -eq 1 ]
	then
	echo "mail -r $FROM -s \"$SUBJECT\" $TO < $MESSAGE_BODY_TEMP_FILE"
	sleep 5
	else
	echo "" > /dev/null
	fi
mail -r $FROM -s "$SUBJECT" $TO < $MESSAGE_BODY_TEMP_FILE
else
	if [ $VERBOSE -eq 1 ]
	then
echo "mail -a $ATTACHMENT -r $FROM -s \"$SUBJECT\" $TO < $MESSAGE_BODY_TEMP_FILE"
	sleep 5
	else
	echo "" > /dev/null
	fi
mail -a $ATTACHMENT -r $FROM -s "$SUBJECT" $TO  < $MESSAGE_BODY_TEMP_FILE
fi

}

# Here I am calling the function MAIL
MAIL

sleep 5

rm $MESSAGE_BODY_TEMP_FILE 2> /dev/null 1> /dev/null


exit 0