我需要使用 mailx 命令发送电子邮件。我很清楚该命令将如下所示:
echo "Body message" | mailx -s "Sending mail with Mailx" -r "[email protected]" "[email protected]"
现在,我有一个文件,我需要在电子邮件正文中发送该文件的内容
mailx -s "Sending mail with Mailx" -r "[email protected]" "[email protected]" < bodymail.txt
或者
echo "$(cat bodymail.txt)" | mailx -s "Sending mail with Mailx" -r "[email protected]" "[email protected]"
在这两种情况下,我总是将文件作为附件放置。他们是否知道我如何将文件内容放入电子邮件正文中而不是作为附件?正文消息转换成ATT00001.bin文件附件。我已从邮件 bodymail.txt 中的文件中删除了特殊字符,但我找不到在正文消息中显示内容的方法
答案1
\n
需要删除的不仅仅是字符。它也可能是 128 以上的 ASCII 字符(例如á
, é
, í
, ñ
, ó
,等重音字符ú
)。要删除它们:
tr -d '[\015\200-\377]' < input_file > output_file
清理文件后,您可以使用它来发送,如下所示:
mailx -s 'Error Log' [email protected] < output_file
这次它应该作为邮件正文而不是二进制附件进行传递。
答案2
尝试以下命令,
cat bodymail.txt | mailx -s "Sending mail with Mailx" [email protected]
答案3
我遇到了这个问题。我从手册页得到的解决方案提示:
Mailx 期望输入文本采用 Unix 格式,各行仅由换行符(^J、\n)分隔。另外使用回车符(^M、\r)的非 Unix 文本文件将被视为二进制数据;要将此类文件作为文本发送,请删除这些字符,例如通过 tr -d '\015'
他们用 tr 展示的解决方案只是部分解决方案。如果文件中还有其他控制字符,它们将导致 mailx 将数据视为二进制,然后附加它而不是将其用作正文。以下命令将去除所有特殊字符并将文件的内容放入消息正文中:
tr -cd "[:print:]\n" < SourceFile | mailx -s "Test Subject" [email protected]
有关 tr 的讨论请参见此处: tr 删除所有特殊字符
答案4
-q file
Start the message with the contents of the specified file. May be given in send mode only.
在你的情况下,它将是:
mailx -q bodymail.txt -s "Sending mail with Mailx" -r "[email protected]"