我有以下 shell 脚本片段。
var_name='ZZPCI'
for emailadd in `cat /tmp/email_list.tmp`
do
subject_text="Subject with Var Name "$var_name
subj_text_novar="Subject without Var Name"
email_mssge="this is the message with variable name "$var_name
echo "$email_mssge"|mailx -a /tmp/my_report.txt -s "$subject_text" "$emailadd"
echo "$email_mssge"|mailx -a /tmp/my_report.txt -s "$subj_text_novar" "$emailadd"
done
它的作用是a.设置变量 var_name b.读取 /tmp/email_list.tmp 中存储的电子邮件地址列表 c.编译并发送带有 /tmp/my_report.txt(纯文本文件)作为附件的电子邮件
该脚本旨在在许多不同的服务器上运行,因此 var_name 将随每个服务器而变化。使用 $subj_text_novar 的 mail 命令(主题字符串中不包括 $var_name)可以正确发送电子邮件。然而,带有 $subject_text 的邮件命令确实包含 $var_name,将附件的内容放入电子邮件的主体中。据我所知,这是实际的 $ 符号导致了问题,因为将 var_name 值硬编码到字符串中是可以的,但我不明白为什么,因为 var_name 肯定只是一个连接字符串那么,我该如何设置邮件主题,因此它包含 $var_name 并且我的文本文件作为附件发送?
我在 SuSE 11.3 上运行该解决方案,但理想情况下该解决方案也需要在 AIX 6.1 和 HP UX11.31 上运行
问候
答案1
我有一些使用 heirloom-mailx 的东西给你:
enviaremail() {
values=$(echo "$@" | tr -d '\n')
listargs=()
listargs+=($values)
heirloom-mailx $( attachment=""
for (( a = 5; a < ${#listargs[@]}; a++ )); do
attachment=$(echo "-a ${listargs[a]} ")
echo "${attachment}"
done) -v -s "${titulo}" \
-S smtp-use-starttls \
-S ssl-verify=ignore \
-S smtp-auth=login \
-S smtp=smtp://$1 \
-S from="${2}" \
-S smtp-auth-user=$3 \
-S smtp-auth-password=$4 \
-S ssl-verify=ignore \
$5 < ${cuerpo}
}
函数调用:enviaremail smtp.mailserver:port from_address authuser 'pass' 以空格分隔的附件目标列表
此外,请记住在使用该功能之前在外部定义电子邮件的 $titulo(主题)和 $cuerpo(正文)。您可以将该函数作为脚本 (mailsend.sh) 放在路径中,然后在带有源的脚本中使用它或将其放在 .bashrc 文件中。
此致