web-dev-qa-db-ja.com

電子メールを送信するシェルスクリプト

私はLinuxマシンを使用しており、プロセスの使用状況を監視しています。ほとんどの場合、システムから離れ、デバイスでインターネットにアクセスできます。そこで、プロセスの出力をメールで送信できるシェルスクリプトを作成する予定でした。

出来ますか?

もしそうなら、シェルスクリプトを作成してメールを送る方法は?

開始するにはスニペットを提供してください。

85
user517400

はい、それはうまく動作し、一般的に使用されます:

$ echo "hello world" | mail -s "a subject" [email protected]
130
trojanfoe

基本的に「メール」と呼ばれる、それを達成するためのプログラムがあります。メールの件名は-sで、アドレスのリストは-tで指定できます。 echoコマンドで自分でテキストを書くことができます:

echo "This will go into the body of the mail." | mail -s "Hello world" [email protected]

または、他のファイルからも取得します。

mail -s "Hello world" [email protected] < /home/calvin/application.log

メールは添付ファイルの送信をサポートしていませんが、Muttはサポートしています。

echo "Sending an attachment." | mutt -a file.Zip -s "attachment" [email protected]

Muttはメールよりもはるかに完全であることに注意してください。より良い説明を見つけることができます こちら

PS:以前の回答はひどいものだと指摘してくれた@slhckに感謝します。 ;)

22
BlackBear

sendmailはMacで動作します(10.6.8)

echo "Hello" | sendmail -f [email protected] [email protected]
7
zcaudate
#!/bin/sh
#set -x
LANG=fr_FR

# ARG
FROM="[email protected]"
TO="[email protected]"
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
3
david
mail -s "Your Subject" [email protected] < /file/with/mail/content

/file/with/mail/contentは、添付ファイルや画像などではなく、プレーンテキストファイルである必要があります)

1
slhck
top -b -n 1 | mail -s "any subject" [email protected]
0
ajreal

もちろん、最も簡単な解決策は、出力をメールにパイプすることです。

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 &が通常通りうまくいくと思います。

0
ShiDoiSi