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
邮件不支持发送附件,但Mutt会:
echo "Sending an attachment." | mutt -a file.zip -s "attachment" target@email.com
请注意,Mutt比邮件更完整。 你可以在这里find更好的解释
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
应该是一个纯文本文件,而不是文件附件或图像等)
那么,最简单的解决scheme当然就是将输出传送到邮件中:
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