zed: support subject as header in zed_notify_email()

Some minimal MUAs don't support passing the subjects as cmdline option.
This commit checks if "@SUBJECT@" is missing in ZED_EMAIL_OPTS and then
prepends a subject header to the notification message.
Also set a default for ${subject}.

Reviewed-by: Ahelenia Ziemia<C5><84>ska <nabijaczleweli@nabijaczleweli.xyz>
Reviewed-by: Tony Hutter <hutter2@llnl.gov>
Signed-off-by: Daniel Hiepler <d-git@coderdu.de>
Closes #13440
This commit is contained in:
heeplr 2022-05-18 19:27:53 +02:00 committed by Brian Behlendorf
parent 0a688b2345
commit 2458c7e63a
2 changed files with 18 additions and 4 deletions

View File

@ -224,6 +224,8 @@ zed_notify()
# ZED_EMAIL_OPTS. This undergoes the following keyword substitutions: # ZED_EMAIL_OPTS. This undergoes the following keyword substitutions:
# - @ADDRESS@ is replaced with the space-delimited recipient email address(es) # - @ADDRESS@ is replaced with the space-delimited recipient email address(es)
# - @SUBJECT@ is replaced with the notification subject # - @SUBJECT@ is replaced with the notification subject
# If @SUBJECT@ was omited here, a "Subject: ..." header will be added to notification
#
# #
# Arguments # Arguments
# subject: notification subject # subject: notification subject
@ -241,7 +243,7 @@ zed_notify()
# #
zed_notify_email() zed_notify_email()
{ {
local subject="$1" local subject="${1:-"ZED notification"}"
local pathname="${2:-"/dev/null"}" local pathname="${2:-"/dev/null"}"
: "${ZED_EMAIL_PROG:="mail"}" : "${ZED_EMAIL_PROG:="mail"}"
@ -262,12 +264,23 @@ zed_notify_email()
return 1 return 1
fi fi
ZED_EMAIL_OPTS="$(echo "${ZED_EMAIL_OPTS}" \ # construct cmdline options
ZED_EMAIL_OPTS_PARSED="$(echo "${ZED_EMAIL_OPTS}" \
| sed -e "s/@ADDRESS@/${ZED_EMAIL_ADDR}/g" \ | sed -e "s/@ADDRESS@/${ZED_EMAIL_ADDR}/g" \
-e "s/@SUBJECT@/${subject}/g")" -e "s/@SUBJECT@/${subject}/g")"
# shellcheck disable=SC2086 # pipe message to email prog
eval ${ZED_EMAIL_PROG} ${ZED_EMAIL_OPTS} < "${pathname}" >/dev/null 2>&1 # shellcheck disable=SC2086,SC2248
{
# no subject passed as option?
if [ "${ZED_EMAIL_OPTS%@SUBJECT@*}" = "${ZED_EMAIL_OPTS}" ] ; then
# inject subject header
printf "Subject: %s\n" "${subject}"
fi
# output message
cat "${pathname}"
} |
eval ${ZED_EMAIL_PROG} ${ZED_EMAIL_OPTS_PARSED} >/dev/null 2>&1
rv=$? rv=$?
if [ "${rv}" -ne 0 ]; then if [ "${rv}" -ne 0 ]; then
zed_log_err "${ZED_EMAIL_PROG##*/} exit=${rv}" zed_log_err "${ZED_EMAIL_PROG##*/} exit=${rv}"

View File

@ -30,6 +30,7 @@ ZED_EMAIL_ADDR="root"
# The string @SUBJECT@ will be replaced with the notification subject; # The string @SUBJECT@ will be replaced with the notification subject;
# this should be protected with quotes to prevent word-splitting. # this should be protected with quotes to prevent word-splitting.
# Email will only be sent if ZED_EMAIL_ADDR is defined. # Email will only be sent if ZED_EMAIL_ADDR is defined.
# If @SUBJECT@ was omited here, a "Subject: ..." header will be added to notification
# #
#ZED_EMAIL_OPTS="-s '@SUBJECT@' @ADDRESS@" #ZED_EMAIL_OPTS="-s '@SUBJECT@' @ADDRESS@"