Shell script для отправки электронной почты

Я на машине linux, и я отслеживаю использование процесса. Большую часть времени я буду вдали от своей системы, и у меня есть доступ к Интернету на моем устройстве. Поэтому я планировал написать оболочку script, которая может отправить мне сообщение о выходе процесса.

Возможно ли это?

Если да, то как сделать shell- script отправить мне почту?

Предоставьте фрагмент, чтобы начать.

Ответ 1

Да, он работает нормально и обычно используется:

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

Ответ 2

В принципе, есть программа для этого, называемая "mail". Субъект электронной почты может быть указан с помощью -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, который указал, что мой предыдущий ответ был ужасен.;)

Ответ 4

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

Ответ 5

mail -s "Your Subject" [email protected] < /file/with/mail/content

(/file/with/mail/content должен быть файлом открытого текста, а не файловым вложением или изображением и т.д.)

Ответ 6

Ну, самым простым решением, естественно, было бы вывести вывод в почту:

[email protected]:~$ cat test.sh
sleep 3 && echo test | mail -s test [email protected]
[email protected]:~$ nohup sh test.sh
nohup: ignoring input and appending output to `nohup.out'

Я думаю, sh test.sh & будет делать то же самое нормально.