我想使用 sendmail 给我发送东西并且想用一行代码来完成。
echo "mail content" | sendmail emailataddres.com
发送时无需主题。
主题行必须位于邮件内容之前,因此我正在寻找类似以下内容的内容:
echo "mail content" | prepend "Subject: All that matters" | sendmail emailataddres.com
sed 和 awk 的使用和记忆确实很不方便。
编辑:只是为了澄清:echo“邮件内容”只是一个说明性示例。我需要能够将来自任何来源的内容添加到 stdout 流中。例如:ifconfig、zcat 等。
答案1
$ echo 1 | (echo 2 && cat)
2
1
我非常确定有一个更好的解决方案,但这应该可以。
答案2
要么采用 Claudius 所说的,要么自己做:
〜/ bin /前置:
#!/bin/sh
echo -en "$@"
cat -
例如:
$ echo "Splendid SUPANINJA! Let's do it!" |\
prepend "Subject: Venetian Snares\n"
Subject: Venetian Snares
Splendid SUPANINJA! Lets do it!
答案3
这是受到克劳迪斯回答的启发。
如果您不想在输出之间中断返回,请添加参数-n
。这将看起来像:
$ echo 1 | (echo -n 2 && cat)
这将给出:
21
答案4
从我收集到的资料来看......你可以做这样的事情:
echo "Subject: All that matters
`echo "mail content"`" | sendmail blah@blahblah
请注意,我没有在第一行关闭引号...因为并非所有的 shell 都会将其转换\n
为换行符...但我还没有找到一个不会处理引号内实际换行符的 shell。
当命令被括在 ` 字符中时,它将被执行,并且输出将被就地注入。请记住,这段代码有点危险,因为它可能会内联注入其他命令,这很容易危及您的系统……
****编辑**** 根据 Claudius 的建议,更清洁的选项应如下所示:
echo -e "Subject: All that matters \n $(echo "mail content") |sendmail blah@blahblah
即使有了那个模板,它也可能被利用。