Centos mailx 发送正文作为附件

Centos mailx 发送正文作为附件

我有一个脚本,想用它来发送电子邮件。我尝试发送一个字符串变量作为正文,但 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]

相关内容