2011-01-11 17 views
76

मैं लिनक्स मशीन पर हूं और मैं एक प्रक्रिया उपयोग की निगरानी करता हूं। अधिकांश समय मैं अपने सिस्टम से दूर रहूंगा और मेरे पास अपने डिवाइस पर इंटरनेट तक पहुंच होगी। इसलिए मैंने एक शेल-स्क्रिप्ट लिखने की योजना बनाई जो मुझे प्रक्रिया के आउटपुट को मेल कर सकती है।शैल स्क्रिप्ट ईमेल भेजने के लिए

क्या यह संभव है?

यदि ऐसा है तो शेल-स्क्रिप्ट कैसे बनाएं मुझे मेल भेजें?

कृपया शुरू करने के लिए एक स्निपेट प्रदान करें।

उत्तर

114

हाँ, यह ठीक काम करता है और आमतौर पर इस्तेमाल किया जाता है:

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

$ echo "हैलो वर्ल्ड" | मेल-एस "एक विषय" -ए "अनुलग्नक फ़ाइल" [email protected] फाइल भेजने के लिए –

+3

मुझे इस आदेश के लिए प्रीसेट ट्यूटोरियल कहां मिल सकता है? इस आदेश को निष्पादित करने के लिए, मुझे कुछ कॉन्फ़िगर करने की आवश्यकता है। – Zen

+0

@Zen ठीक है आपको अपना स्थानीय एमटीए कॉन्फ़िगर करना होगा। – trojanfoe

21

मूल रूप से इसे पूरा करने के लिए एक कार्यक्रम है, जिसे "मेल" कहा जाता है। ईमेल का विषय एएस के साथ निर्दिष्ट किया जा सकता है और पता के साथ पते की एक सूची। आप गूंज कमांड के साथ अपने दम पर पाठ लिख सकते हैं:

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 

मेल संलग्नक के भेजने का समर्थन नहीं करता है, लेकिन मठ करता है:

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

ध्यान दें कि मठ मेल से कहीं अधिक पूर्ण है। आप बेहतर स्पष्टीकरण here

पीएस: @ एसएलएचके के लिए धन्यवाद जिन्होंने इंगित किया कि मेरा पिछला उत्तर भयानक था। ;)

+2

Stackoverflow आत्म निहित होना चाहिए - यह आप प्रतिलिपि बनाना उतना ही समय ले लिया होता/URL पेस्ट उस साइट के और एक-लाइनर @ एशविन की प्रतिलिपि बनाने/पेस्ट करने के लिए कहा गया। – slhck

+0

@ एसएलएचके: शायद पूरा पृष्ठ एक या दो लाइनों से बेहतर है और मैं इससे बेहतर समझाऊंगा। मेरा निश्चित रूप से सबसे अच्छा जवाब नहीं है लेकिन डाउनवोट यह काफी अनुचित है क्योंकि यह किसी भी अन्य उत्तर की एक ही जानकारी प्रदान करता है। – BlackBear

+0

यह एक लंबी चर्चा रही है: http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links- कहीं और- वास्तव में- अच्छा-answers - भले ही यह वही जानकारी प्रदान करता हो, आप इसे पच सकते थे और अपना स्रोत उद्धृत कर सकते थे। – slhck

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

(/file/with/mail/content एक प्लेन टेक्स्ट फ़ाइल, नहीं एक फ़ाइल अनुलग्नक या एक छवि, आदि)

+1

क्या यह बाइनरी फाइलों के साथ काम करता है? मुझे लगता है कि मुझे अतीत में सभी द्विआधारी फ़ाइल एन्कोडिंग करने से पहले म्यूट का उपयोग करना पड़ा था। – Marcin

+0

आपका मतलब मेल अटैचमेंट के रूप में फ़ाइल भेजने का प्रयास करते समय? आप निश्चित रूप से इसके बारे में सही हैं। मेरा मतलब केवल टेक्स्ट फाइल था। – slhck

+0

हां! @ एसएलएचक का मतलब केवल टेक्स्ट फाइल था। 'मेल' उपयोगकर्ता को अनुलग्नक नहीं बना सकता है। –

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 
संबंधित मुद्दे