Shell脚本发送电子邮件

时间:2011-01-11 13:49:54

标签: linux email shell scripting

我在linux机器上,我监控进程使用情况。大部分时间我都会离开我的系统而且我可以在我的设备上访问互联网。所以我打算写一个shell脚本,可以把这个过程的输出邮寄给我。

有可能吗?

如果是这样,如何让shell脚本给我发邮件?

请提供一个片段以便开始使用。

7 个答案:

答案 0 :(得分:130)

是的,它运行正常并且常用:

$ echo "hello world" | mail -s "a subject" someone@somewhere.com

答案 1 :(得分:22)

基本上有一个程序可以完成,称为“邮件”。可以使用-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比邮件更完整。 您可以找到更好的解释here

PS:感谢@slhck,他指出我之前的回答非常糟糕。 ;)

答案 2 :(得分:7)

sendmail适用于Mac(10.6.8)

echo "Hello" | sendmail -f my@email.com my@email.com

答案 3 :(得分:3)

#!/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

答案 4 :(得分:1)

mail -s "Your Subject" your@email.com < /file/with/mail/content

/file/with/mail/content应该是纯文本文件,而不是文件附件或图片等)

答案 5 :(得分:0)

嗯,最简单的解决方案当然是将输出传输到邮件中:

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 &通常会做得很好。

答案 6 :(得分:0)

top -b -n 1 | mail -s "any subject" your_email@domain.com