我有一个脚本,想用它来发送电子邮件。我尝试发送一个字符串变量作为正文,但 mailx 将其添加为附件“ATT00001.bin”。
以下是我的脚本的片段:
RESULT=''
for i in "${ARRAY[@]}"
do
FILE=($(ls /tmp/backup/*$i*.xml -Art | tail -n 1))
BACKUP_NAME=$(grep 'label' $FILE)
BACKUP_NAME=${BACKUP_NAME/<label>/}
BACKUP_NAME=${BACKUP_NAME/<\/label>/}
RESULT="$RESULT"$'\n'"INFO: $i - $BACKUP_NAME"
done
echo "$RESULT" | mailx -r "[email protected]" -s "Script Report" [email protected]
我认为这与我构建变量的方式有关,因为发送其他单行变量或文件的工作方式与预期一致。我还尝试将变量输出到文件,然后将其 cat 到 mailx,结果相同。
如何将 $RESULT 变量的内容放入邮件正文中?在这种情况下,安装和使用其他实用程序不是一种选择。
答案1
我自己解决了这个问题。我发现字符串中添加了 ^M 回车符,而 windows/exchange/outlook 都不喜欢它。我通过将 RESULT 发送到文件并使用 vim 进行编辑发现了这一点。
我通过输出到文件、对文件运行 sed 并通过正则表达式删除不需要的字符,然后通过该文件发送电子邮件。请参阅下面的调整后的代码:
RESULT=''
for i in "${ARRAY[@]}"
do
FILE=($(ls /tmp/backup/*$i*.xml -Art | tail -n 1))
BACKUP_NAME=$(grep 'label' $FILE)
BACKUP_NAME=${BACKUP_NAME/<label>/}
BACKUP_NAME=${BACKUP_NAME/<\/label>/}
RESULT="$RESULT"$'\n'"INFO: $i - $BACKUP_NAME"
done
echo "$RESULT" > /tmp/result.txt
sed -i "s/\r//g" /tmp/result.txt
cat /tmp/result.txt | mailx -r "[email protected]" -s "Script Report" [email protected]
答案2
类似方法,但没有文件:
RESULT=''
for i in "${ARRAY[@]}"
do
FILE=($(ls /tmp/backup/*$i*.xml -Art | tail -n 1))
BACKUP_NAME=$(grep 'label' $FILE)
BACKUP_NAME=${BACKUP_NAME/<label>/}
BACKUP_NAME=${BACKUP_NAME/<\/label>/}
RESULT="$RESULT"$'\n'"INFO: $i - $BACKUP_NAME"
done
RESULT=$(echo "$RESULT" | sed -e 's/\r//g')
# If you have problem with format, try: echo -e
echo "$RESULT" | mailx -r "[email protected]" -s "Script Report" [email protected]