2011-01-11 6 views
76

나는 리눅스 머신을 사용 중이며 프로세스 사용을 모니터링한다. 대개의 경우 시스템에서 벗어나 기기에 인터넷에 액세스 할 수 있습니다. 그래서 나는 프로세스의 결과물을 메일로 보낼 수있는 쉘 스크립트를 작성하려고 계획했다.이메일을 보낼 쉘 스크립트

가능합니까?

그렇다면 어떻게 쉘 스크립트를 만들어 메일을 보내나요?

시작하려면 스 니펫을 제공해주십시오.

답변

114

:

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

$ echo "hello world"| mail -s "제목"- "첨부 파일"[email protected] 파일 보내기 –

+3

이 명령에 대한 사전 설정 자습서는 어디에서 찾을 수 있습니까? 이 명령을 실행하려면 뭔가 구성해야합니다. – Zen

+0

@Zen 그럼 로컬 MTA를 구성해야합니다. – trojanfoe

21

기본적으로 "메일"이라고 불리는 프로그램이 있습니다. 전자 메일의 제목은 -s 및 -t와 함께 주소 목록으로 지정할 수 있습니다.

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

를 너무 다른 파일에서 그것을 얻을 : 당신은 echo 명령과 함께 자신의 텍스트를 쓸 수

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

메일 첨부 파일의 전송을 지원하지 않지만, 똥개을 수행합니다

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

Mutt는 메일보다 훨씬 완벽합니다. 더 나은 설명을 찾을 수 있습니다. here

추신 : @slhck에게 감사드립니다. 저의 이전 답변은 끔찍했습니다. ;) 잘 작동하고 일반적으로 사용되는 예

+2

유래 자체가 포함되어야합니다 - 그것은 복사하는 시간을 당신에게 동일한 금액을 촬영 한 것입니다/URL을 붙여 넣 @Ashwin이 요청한 한 줄짜리 라이너를 복사하여 붙여 넣으십시오. – slhck

+0

@slhck : 아마 전체 페이지가 1 ~ 2 라인보다 좋으며 내가하는 것보다 더 잘 설명됩니다. 내 것은 확실하게 최선의 대답은 아니지만 하향 투표는 다른 답변과 동일한 정보를 제공하기 때문에 매우 불공평합니다. – BlackBear

+0

이것은 오랜 토론이었습니다. http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers - 동일한 정보를 제공하더라도, 당신은 그것을 소화 시켰고 당신의 출처를 인용 할 수있었습니다. – slhck

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

(/file/with/mail/content는 일반 텍스트 파일이 아닌 첨부 파일이나 이미지 등)

+1

바이너리 파일과 호환됩니까? 이전에는 모든 바이너리 파일 인코딩을하기 전에 mutt을 사용해야했다고 생각합니다. – Marcin

+0

파일을 메일 첨부 파일로 보내려고 할 때를 의미합니까? 물론 이것에 대해 당신 말이 맞습니다. 나는 텍스트 파일만을 의미했다. – slhck

+0

예! @slhck는 텍스트 파일만을 의미합니다. '메일'은 사용자에게 첨부 파일을 만들 수 없습니다. –

0

잘해야한다은 내가를 추측

[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' 

: 쉬운 솔루션은 물론 파이프에 메일로 출력 될 것이다 210은 정상적으로 정상적으로 작동합니다. 맥에 나를 위해

3
#!/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 
관련 문제