这个问题已经在这里有一个答案:
- 从Linux shell脚本发送邮件 10个回答
我的Linux机器上,我监控过程中使用。 大多数时候,我会从我的系统离开时,我可以访问互联网设备上。 所以我打算写一个shell脚本,可以寄给我的过程的输出。
可能吗?
如果是的话如何让shell脚本给我发邮件?
请提供上手片段。
这个问题已经在这里有一个答案:
我的Linux机器上,我监控过程中使用。 大多数时候,我会从我的系统离开时,我可以访问互联网设备上。 所以我打算写一个shell脚本,可以寄给我的过程的输出。
可能吗?
如果是的话如何让shell脚本给我发邮件?
请提供上手片段。
是的,它工作正常,通常用于:
$ echo "hello world" | mail -s "a subject" someone@somewhere.com
基本上有一个计划,以实现这一目标,被称为“邮件”。 该电子邮件的主题可以用-s和地址与-t列表来指定。 你可以写上自己的文字与echo命令:
echo "This will go into the body of the mail." | mail -s "Hello world" you@youremail.com
或从其他文件得到它太:
mail -s "Hello world" you@youremailid.com < /home/calvin/application.log
邮件不支持附件的发送,但笨蛋呢:
echo "Sending an attachment." | mutt -a file.zip -s "attachment" target@email.com
需要注意的是马特的比邮件更完整。 你可以找到更好的解释这里
PS:感谢@slhck谁指出,我以前的答案是可怕的。 ;)
sendmail
工作对我来说在MAC(10.6.8)
echo "Hello" | sendmail -f my@email.com my@email.com
#!/bin/sh
#set -x
LANG=fr_FR
# ARG
FROM="foo@bar.com"
TO="foo@bar.com"
SUBJECT="test é"
MSG="BODY éé"
FILES="fic1.pdf fic2.pdf"
# http://fr.wikipedia.org/wiki/Multipurpose_Internet_Mail_Extensions
SUB_CHARSET=$(echo ${SUBJECT} | file -bi - | cut -d"=" -f2)
SUB_B64=$(echo ${SUBJECT} | uuencode --base64 - | tail -n+2 | head -n+1)
NB_FILES=$(echo ${FILES} | wc -w)
NB=0
cat <<EOF | /usr/sbin/sendmail -t
From: ${FROM}
To: ${TO}
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=frontier
Subject: =?${SUB_CHARSET}?B?${SUB_B64}?=
--frontier
Content-Type: $(echo ${MSG} | file -bi -)
Content-Transfer-Encoding: 7bit
${MSG}
$(test $NB_FILES -eq 0 && echo "--frontier--" || echo "--frontier")
$(for file in ${FILES} ; do
let NB=${NB}+1
FILE_NAME="$(basename $file)"
echo "Content-Type: $(file -bi $file); name=\"${FILE_NAME}\""
echo "Content-Transfer-Encoding: base64"
echo "Content-Disposition: attachment; filename=\"${FILE_NAME}\""
#echo ""
uuencode --base64 ${file} ${FILE_NAME}
test ${NB} -eq ${NB_FILES} && echo "--frontier--" || echo
"--frontier"
done)
EOF
mail -s "Your Subject" your@email.com < /file/with/mail/content
( /file/with/mail/content
应该是明文文件,而不是一个文件附件或图像等)
那么,最简单的解决办法当然是管道输出到邮件:
vs@lambda:~$ cat test.sh
sleep 3 && echo test | mail -s test your@address
vs@lambda:~$ nohup sh test.sh
nohup: ignoring input and appending output to `nohup.out'
我想sh test.sh &
会做得细正常。
top -b -n 1 | mail -s "any subject" your_email@domain.com