एक लाइन खोल स्क्रिप्ट से एक मेल भेज रहा है


120

मैं लिनक्स शेल स्क्रिप्ट से एक ईमेल भेजना चाहता हूं। ऐसा करने के लिए मानक कमांड क्या है और क्या मुझे कोई विशेष सर्वर नाम सेट करने की आवश्यकता है?


8
Superuser [ superuser.com ] या, अभी तक, यूनिक्स और लिनक्स SE [ unix.stackexchange ]] पर पूछने का प्रयास करें ।
दान मोल्डिंग

जवाबों:


119

यदि सर्वर अच्छी तरह से कॉन्फ़िगर किया गया है, उदाहरण के लिए इसमें एक अप और एमटीए चल रहा है, तो आप केवल मेल कमांड का उपयोग कर सकते हैं।

उदाहरण के लिए, किसी फ़ाइल की सामग्री भेजने के लिए, आप यह कर सकते हैं:

$ cat /path/to/file | mail -s "your subject" your@email.com

man mail अधिक जानकारी के लिए।


7
'माता' का यहाँ क्या अर्थ है, क्या पूरा नाम या एक कड़ी है? एक शुरुआत के रूप में, यही मैं जानना चाहता हूं। जैसा कि मेरे पास ऐसा करने के लिए अनुभव की कमी है।
जेन

5
@ZTA MTA का मतलब मेल ट्रांसपोर्ट एजेंट से है। पोस्टफिक्स, सेंडमेल, क्यूमेल आदि
फ्रांसेस्को लॉरिटा

@ अधिकांश भाग के लिए, आप MTA का अर्थ SMTP या IMAP सर्वर मान सकते हैं।
user151841

1
यदि आप सुनिश्चित नहीं हैं कि कैसे स्थापित करें / कॉन्फ़िगर करें और आप उबंटू पर हैं: sudo apt-get install mailutilsऔर इंटरनेट साइट का चयन करें : मेल एसएमटीपी का उपयोग करके सीधे भेजा और प्राप्त किया जाता है।
user1717828

86

आप पार्टी में एक स्वच्छ और सरल दृष्टिकोण चाहते हैं, और आप का उपयोग नहीं करना चाहते हैं cat, echoआदि, सबसे आसान तरीका होगा:

mail -s "subject here" email@address.com <<< "message"

<<<मानक इनपुट को पुनर्निर्देशित करने के लिए उपयोग किया जाता है। यह लंबे समय से बैश का हिस्सा रहा है।


6
echo -e "Some \ nMultiline and tab \ t msg" | mail -s "विषय" your@email.com
Pipo

cat << END...END | mail -s "subject" test@example.com
ulidtko

अरे, यह मेरे लिए बहुत अच्छा काम किया, धन्यवाद! मैं कैसे कई पते निर्दिष्ट करूंगा?
ई।

1
@ E.Owen आप रिक्त स्थान द्वारा अलग-अलग पते पर भेजने के लिए -t विकल्प का उपयोग कर सकते हैं
जॉन

25

यदि एक्ज़िम और ssmtp दोनों चल रहे हैं, तो आप परेशानियों में प्रवेश कर सकते हैं। इसलिए यदि आप केवल एक साधारण MTA चलाना चाहते हैं, तो बस एक साधारण smtp क्लाइंट के पास आग्रह के लिए ईमेल सूचनाएं भेजने के लिए, आप अंततः पहले MTA को एक्सिम या पोस्टफ़िक्स जैसे पहले से ही शुद्ध कर लेंगे और ssmtp को फिर से इंस्टॉल करेंगे।

तब यह काफी सीधा होता है, केवल 2 फाइलों (रिवाइलैसेस और ssmtp.conf) को कॉन्फ़िगर करना - ssmtp doc देखें - और आपकी बैश या बॉर्न स्क्रिप्ट में उपयोग इस तरह है:

#!/bin/sh  
SUBJECT=$1  
RECEIVER=$2  
TEXT=$3  

SERVER_NAME=$HOSTNAME  
SENDER=$(whoami)  
USER="noreply"

[[ -z $1 ]] && SUBJECT="Notification from $SENDER on server $SERVER_NAME"  
[[ -z $2 ]] && RECEIVER="another_configured_email_address"   
[[ -z $3 ]] && TEXT="no text content"  

MAIL_TXT="Subject: $SUBJECT\nFrom: $SENDER\nTo: $RECEIVER\n\n$TEXT"  
echo -e $MAIL_TXT | sendmail -t  
exit $?  

स्पष्ट रूप से smtp port (25) में अपना फ़ायरवॉल आउटपुट खोलना न भूलें।


मैं इस स्क्रिप्ट में पोर्ट नंबर कहां बदल सकता हूं? मेरे सर्वर में smtp पोर्ट 8181 पर काम करता है।
manix

मैं इस शेल में ऐसा नहीं करूंगा अन्यथा आप जल्दी या बाद में फंस जाएंगे। आप इसे कॉन्फिग फ़ाइल में कर सकते हैं: unix.stackexchange.com/a/132731
hornetbzz

1
यदि मैं सरल प्रतिध्वनि $ MAIL_TXT बनाता हूं, तो नई सूचियों का अंतर्ग्रहण क्यों किया जा रहा है?
कर्नेलपैनिक


क्षमा करें, गलत पैरामीटर था
कर्नेलपैनिक

10

बैश स्क्रिप्ट में एक और विकल्प:

mailbody="Testmail via bash script"
echo "From: info@myserver.test" > /tmp/mailtest
echo "To: john@mywebsite.test" >> /tmp/mailtest
echo "Subject: Mailtest subject" >> /tmp/mailtest
echo "" >> /tmp/mailtest
echo $mailbody >> /tmp/mailtest
cat /tmp/mailtest | /usr/sbin/sendmail -t
  • /tmp/mailtestइस स्क्रिप्ट का उपयोग करने पर फ़ाइल को ओवरराइट कर दिया जाता है।
  • Sendmail का स्थान प्रति सिस्टम भिन्न हो सकता है।
  • क्रोन स्क्रिप्ट में इसका उपयोग करते समय, आपको सेंडमेल कमांड के लिए निरपेक्ष पथ का उपयोग करना होगा।

1
नीचा दिखाया गया क्योंकि एक ही समय में एक से अधिक प्रक्रिया स्क्रिप्ट को कॉल कर सकती थी। यह भ्रष्ट / गलत tmp फ़ाइल का कारण बन सकता है। साथ ही / tmp फ़ाइल का उपयोग होने पर हर बार ओवरराइट नहीं किया जाता है - यह वास्तव में प्रत्येक ईमेल के साथ बढ़ता है जिसमें सभी पिछले ईमेल होते हैं। अच्छा नही।
टैटहेड

1
/ Tmp / mailtest के लिए पहला लेखन एक अधिलेखित है, इसलिए यह जो कुछ भी वहां पहले था उसे हटा देगा। फिर भी, यह विधि आपके द्वारा वर्णित अन्य कारणों के लिए आदर्श नहीं है।
साइमन 21

8

आम तौर पर, आप mailस्थानीय एमटीए का उपयोग करके अपना संदेश भेजने के लिए कमांड का उपयोग करना चाहते हैं (जो या तो इसे एसएमटीपी का उपयोग करके गंतव्य तक पहुंचाएगा या इसे कुछ अधिक शक्तिशाली एसएमटीपी सर्वर में उदाहरण के लिए, आपके आईएसपी पर अग्रेषित करेगा)। यदि आपके पास एक स्थानीय एमटीए नहीं है (हालांकि यह एक को छोड़ने के लिए यूनिक्स-जैसी प्रणाली के लिए थोड़ा असामान्य है), तो आप या तो कुछ न्यूनतम एमटीए जैसे ssmtp का उपयोग कर सकते हैं ।

ssmtpकॉन्फ़िगर करना काफी आसान है। मूल रूप से, आपको केवल यह बताना होगा कि आपके प्रदाता का SMTP सर्वर कहां है:

# The place where the mail goes. The actual machine name is required
# no MX records are consulted. Commonly mailhosts are named mail.domain.com
# The example will fit if you are in domain.com and you mailhub is so named.
mailhub=mail

एक अन्य विकल्प यह है कि एक myriads स्क्रिप्ट का उपयोग करें जो सीधे SMTP सर्वर से कनेक्ट होती है और वहां एक संदेश पोस्ट करने का प्रयास करती है, जैसे कि Smtp-Auth-Email-Script , smtp-cli , SendEmail , आदि।


"ssmtp" को मशीन पर स्थापित किया गया है, इसलिए मैं इसे आज़माने में असमर्थ था, लेकिन फिर भी धन्यवाद
appshare.co

5

आप कुछ smtp सर्वर का उपयोग करना चाहते हैं, आप कर सकते हैं:

export SUBJECT=some_subject
export smtp=somehost:someport
export EMAIL=someaccount@somedomain
echo "some message" | mailx -s "$SUBJECT" "$EMAIL"

बदलें somehost, someportऔर someaccount@somedomainवास्तविक मूल्यों के लिए जो आप उपयोग करेंगे। इस उदाहरण में कोई एन्क्रिप्शन और कोई प्रमाणीकरण नहीं किया जाता है।


और अगर mailxस्थापित नहीं है तो क्या करें ?
nalply

2

mailआदेश है कि (जो अनुमान लगाया है | ;-) करता है। अपना शेल खोलें और उपलब्ध सभी विकल्पों के लिए कमांड के लिए man mailमैनुअल पेज प्राप्त करने के लिए दर्ज mailकरें।


2
मैंने ऐसा किया है, लेकिन सर्वर का उपयोग करने का कोई विकल्प नहीं है
appshare.co

1
यह आपके स्थानीय मेल ट्रांसफर एजेंट कॉन्फ़िगरेशन का हिस्सा है, जैसे सेंडमेल या पोस्टफ़िक्स।
डार्कडस्ट

2

आपको MTA की भी आवश्यकता नहीं है। SMTP प्रोटोकॉल सीधे अपने SMTP सर्वर पर लिखने के लिए पर्याप्त है। यदि आपके पास ओपनएसएसएल पैकेज स्थापित है, तो आप एसएसएल / टीएलएस पर भी संवाद कर सकते हैं। इस पोस्ट को देखें: https://33hops.com/send-email-from-bash-shell.html

उपरोक्त पाठ / html ई-मेल भेजने के तरीके पर एक उदाहरण है जो बॉक्स से बाहर काम करेगा। यदि आप अटैचमेंट जोड़ना चाहते हैं तो बात थोड़ी और जटिल हो सकती है, आपको बाइनरी फ़ाइलों को एनकोड करने और उन्हें सीमाओं पर एम्बेड करने की आवश्यकता होगी। यह जाँच शुरू करने के लिए एक अच्छी जगह है: http://forums.codeguru.com/showthread.php?418377-end-Email-w-attachments-use-SMTP


2

Linux पर, मेल यूटिलिटी का उपयोग "-a" विकल्प के साथ अटैचमेंट भेजने के लिए किया जा सकता है। विकल्प के बारे में पढ़ने के लिए मैन पेज पर जाएं। उदाहरण के लिए निम्नलिखित कोड एक अनुलग्नक भेजेगा:

मेल -s "यह विषय है" -a अनुलग्नक .xt name@domain.com <<< "हाय बडी, कृपया विफलता रिपोर्ट पाएं।"


एसओ में आपका स्वागत है। उत्तर पोस्ट करने के लिए धन्यवाद। कृपया एक अच्छा उत्तर लिखने और तदनुसार संशोधित करने के बारे में जानकारी पढ़ें । आनंद लें; ;-)
ZF007

2

GMAIL को LINUX से मेल भेजें

पोस्टिंग का उपयोग

1: सॉफ्टवेयर स्थापित करें

डेबियन और उबंटू:

apt-get update && apt-get install postfix mailutils

OpenSUSE:

zypper update && zypper install postfix mailx cyrus-sasl

फेडोरा:

dnf update && dnf install postfix mailx

CentOS:

yum update && yum install postfix mailx cyrus-sasl cyrus-sasl-plain

आर्क लिनक्स:

pacman -Sy postfix mailutils

FreeBSD:

portsnap fetch extract update

cd /usr/ports/mail/postfix

make config

विन्यास में एसएएसएल समर्थन का चयन करें

make install clean

pkg install mailx

2. जीमेल कॉन्फ़िगर करें

/ Etc / पोस्टफ़िक्स। पासवर्ड फ़ाइल बनाएं या संपादित करें:

vim /etc/postfix/sasl_passwd

im vim u का उपयोग करते हुए नैनो, कैट जैसे किसी भी फाइल एडिटर का उपयोग कर सकते हैं .....

> उबंटू, फेडोरा, सेंटोस, डेबियन, ओपनसुअस, आर्क लिनक्स:

इसे जोड़ो

जहां उपयोगकर्ता आपके मेलनाम और पासवर्ड से बदल जाता है, वह आपका जीमेल पासवर्ड है

[smtp.gmail.com]:587    user@gmail.com:password

फ़ाइल को सहेजें और बंद करें और इसे केवल रूट द्वारा एक्सेस करें: इसकी संवेदनशील सामग्री को लिखें जिसमें ur पासवर्ड हो

chmod 600 /usr/local/etc/postfix/sasl_passwd

> FreeBSD:

निर्देशिका / usr / स्थानीय / आदि / उपसर्ग।

vim /usr/local/etc/postfix/sasl_passwd

लाइन जोड़ें:

[smtp.gmail.com]:587    user@gmail.com:password

सहेजें और इसे केवल रूट द्वारा सुलभ बनाएं:

chmod 600 /usr/local/etc/postfix/sasl_passwd

3. पोस्टफिक्स कॉन्फ़िगरेशन

कॉन्फ़िगरेशन फ़ाइल main.cf

6 पैरामीटर हमें पोस्टफिक्स में सेट करना होगा

उबंटू, आर्क लिनक्स, डेबियन:

संपादित करें

 vim /etc/postfix/main.cf

निम्नलिखित मानों को संशोधित करें:

relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

smtp_sasl_security_options जो कॉन्फ़िगरेशन में खाली करने के लिए सेट किया जाएगा , यह सुनिश्चित करने के लिए कि कोई भी जीमेल-असंगत सुरक्षा विकल्पों का उपयोग नहीं किया जाता है।

सहेजें और बंद करें

के लिए के रूप में

OpenSUSE:

vim /etc/postfix/main.cf

संशोधित

relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/ca-bundle.pem

इसके लिए फ़ाइल मास्टर.कॉन्फ़ का विन्यास भी आवश्यक है

संशोधित:

vim /etc/postfix/master.cf

इस लाइन को अनइंस्टॉल करके (निकालें #)

#tlsmgr unix - - n 1000? 1 tlsmg

सहेजें और बंद करें

फेडोरा, CentOS:

vim /etc/postfix/main.cf

संशोधित

relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt

FreeBSD:

vim /usr/local/etc/postfix/main.cf

संशोधित:

relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/usr/local/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/mail/certs/cacert.pem

इसे सहेजें और बंद करें

4. प्रक्रिया पासवर्ड फ़ाइल:

Ubuntu, Fedora, CentOS, OpenSUSE, Arch Linux, डेबियन:

postmap /etc/postfix/sasl_passwd

के लिए freeBSD

postmap /usr/local/etc/postfix/sasl_passwd

4.1) पोस्टफ़िक्स को फिर से शुरू करें

Ubuntu, Fedora, CentOS, OpenSUSE, Arch Linux, डेबियन:

systemctl restart postfix.service

के लिए FreeBSD:

service postfix onestart
nano /etc/rc.conf

जोड़ना

postfix_enable=YES

बचाने के लिए फिर शुरू करने के लिए चलाएँ

service postfix start

5. नीचे दिए गए लिंक की मदद से जीमेल में "कम सिक्योर ऐप्स" सक्षम करें

https://support.google.com/accounts/answer/6010255

6. एक टेस्ट ईमेल भेजें

mail -s "subject" recever@domain.com

एंटर दबाए

अपनी इच्छा के अनुसार मेल का मुख्य भाग जोड़ें , फिर उचित समाप्ति के लिए ctrl + d दबाएं

अगर यह काम नहीं कर रहा है तो सभी चरणों को फिर से जांचें और जांचें कि क्या आप अपने जीमेल में " कम सुरक्षित ऐप" सक्षम करते हैं

उसके बाद पोस्टफ़िक्स को पुनः आरंभ करें यदि यू उस में कुछ भी संशोधित करता है

शेल स्क्रिप्ट के लिए .sh फ़ाइल बनाएँ और अपनी आवश्यकता के अनुसार 6 चरण कमांड जोड़ें

उदाहरण के लिए सिर्फ एक नमूने के लिए

#!/bin/bash
REALVALUE=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
THRESHOLD=80

if [ "$REALVALUE" -gt "$THRESHOLD" ] ; then
    mail -s 'Disk Space Alert' mailid@domainname.com << EOF
Your root partition remaining free space is critically low. Used: $REALVALUE%
EOF
fi

स्क्रिप्ट तब ईमेल भेजती है जब डिस्क का उपयोग THRESHOLD संस्करण (80% यहाँ) द्वारा निर्दिष्ट प्रतिशत से ऊपर हो जाता है।


क्या इस उत्तर का नाम "LINEND TO LINUX TO recever@domain.com VIA GMAIL" नहीं होना चाहिए?
कैमरन हडसन

1

आप 'ईमेल' या 'ईमेल' कमांड का उपयोग कर सकते हैं।

(1) $ vim /etc/mail.rc # या # vim /etc/nail.rc

set from = xxx@xxx.com #
set smtp = smtp.exmail.gmail.com #gmail's smtp server 
set smtp-auth-user = xxx@xxx.com #sender's email address
set smtp-auth-password = xxxxxxx #get from gmail, not your email account passwd
set smtp-auth=login

क्योंकि अगर यह एक अधिकृत खाते से नहीं भेजा जाता है, तो ईमेल को रद्दी मेल सूची मिल जाएगी।

(2) $ गूंज "Pls अप्रयुक्त विषयों को हटाने के लिए याद रखें!" | mail -s "बेकार विषय" -a a.txt developer@xxx.com # समूह उपयोगकर्ता 'developer@xxxx.com' पर भेजें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.