जीमेल का उपयोग करके कमांड लाइन के माध्यम से एक-लाइन मेल भेजने का सबसे सरल तरीका?


32

Raspbian और Ubunntu 16.04 LTS का उपयोग करना एक सामान्य लिनक्स समाधान की आवश्यकता है।

आवश्यकता सरल है:

मुझे कमांड लाइन से एक-लाइन ईमेल संदेश भेजने का एक तरीका चाहिए।

मैंने इस विशेष Rpi3 के लिए एक gmail खाता स्थापित किया है, rpi3abc@gmail.com के पते के साथ - कोई 2FA के लिए

इसलिए अब मुझे उपयोगकर्ता के हस्तक्षेप के बिना कहीं से भी (क्रोन सहित) एक-पंक्ति मेल संदेश भेजने में सक्षम होने की आवश्यकता है।


मैं यह भी चाहूंगा कि यह पाठ फ़ाइलों को भेजने में सक्षम हो; मूल रूप से, कुछ भी stdin


क्या आप चाहते हैं कि आपका संदेश इस विशेष पते, rpi3abc@gmail.com से आए या क्या यह आपके लिए ठीक है कि संदेश आपके_सर्नाम @ लोकलहोस्ट से आया है?
जॉन स्मिथ

यह rpi3abc@gmail.com से आता है इसलिए मुझे पता है कि मेरा कंप्यूटर मुझसे संवाद कर रहा है। मैं इसे क्रोन नौकरियों में उपयोग करता हूं, ज्यादातर।
एसडीसोलर

जवाबों:


33

Gmail के माध्यम से एक-पंक्ति संदेश भेजने का सबसे सरल उत्तर है ssmtp का उपयोग करना


इसे निम्न आदेशों के साथ स्थापित करें:

sudo apt-get update
sudo apt-get install ssmtp

/etc/ssmtp/ssmtp.confइस तरह दिखने के लिए संपादित करें :

root=rpi3abc@gmail.com
mailhub=smtp.gmail.com:465
FromLineOverride=YES
AuthUser=rpi3abc@gmail.com
AuthPass=testing123
UseTLS=YES

एक लाइनर जैसे भेजें:

echo "Testing...1...2...3" | ssmtp myusername@gmail.com

या

printf "Subject: Test\n\nTesting...1...2...3" | ssmtp myusername@gmail.com

फिर, * निक्स के लिए सच है, आप बस कुछ ही सेकंड में शीघ्र वापस मिलता है।

अपने myusername@gmail.com खाते की जाँच करें, और यह वहाँ है!


फ़ाइल भेजते समय भी यह अच्छी तरह से काम करता है:

cat program.py | ssmtp myotherusername@yahoo.com

और कार्यक्रम मेलबॉक्स में दिखाई देगा

यदि फ़ाइल एक पाठ फ़ाइल है, तो इसमें पहली पंक्ति हो सकती है जो कहती है Subject: xxxxxx

इसका उपयोग विभिन्न क्रोन नौकरियों के साथ किया जा सकता है जो मुझे विषय सामग्री के साथ डेटा भेज सकते हैं जो सामग्री का संकेत देते हैं।


यह किसी भी चीज के साथ काम करेगा जो एक संदेश तैयार करता है जिसे स्टड के माध्यम से ssmtp में पाइप किया जाता है।


अन्य उपयोगकर्ताओं के खिलाफ इन फ़ाइलों को सुरक्षित करने जैसे और अधिक जानकारी के लिए, इस लेख पर जाएँ:

रास्पबेरी पाई कमांड लाइन से ईमेल भेजें


यदि आवश्यक हो तो स्वरूपित संदेश फ़ाइलों में परिवर्तित किए जा सकने Ruiवाले FROM:पते को लॉक करने के बारे में पोस्ट किए गए उत्तर के नीचे भी देखना सुनिश्चित करें ।


अब अगर केवल मैं यह पता लगा सकता हूं कि एसएमएस को उसी तरह कैसे भेजा जाए।


1
मैं ssmtpअपने वीएम में भी उपयोग करता हूं, बहुत हल्के। +1
रुई एफ रिबेरो

1
पायथन से सेंडमेल एपीआई और सीधे इसे भेजने का उपयोग क्यों नहीं किया गया?
रुई एफ रिबेरो

इसे एक कदम आगे ले जाने के लिए, यहाँ एक अनुलग्नक के रूप में एक छवि फ़ाइल शामिल करने के लिए बहुत सरल निर्देश दिए गए हैं: unix.stackexchange.com/questions/381131/…
SDsolar

रुई के प्रश्न का उत्तर देने के लिए: sendmailअकेले एमटीए - मेल ट्रांसपोर्ट एजेंट के पास मशीन के बाहर संचार करने के लिए नहीं है। डिफ़ॉल्ट रूप से, चूंकि यूनिक्स डिजाइन द्वारा बहु-उपयोगकर्ता हैं, इसलिए sendmailएक ही बॉक्स में अन्य उपयोगकर्ताओं को संदेश भेजेंगे लेकिन बाहर नहीं। ssmtpएमटीए है जो मुझे लगता है कि जीमेल के लिए कॉन्फ़िगर करना सबसे सरल है।
एसडीसोलर

1
हमेशा के लिए पोस्टिक्स को सेटअप करने की कोशिश में बिताया यह काम! इसे पढ़ने वाले किसी को भी ध्यान दें, इस कॉन्फिडो में टाइपो है, रूट पैरामीटर gmail.com होना चाहिए, जीमेल नहीं।
कोडीनिन्जा

9

ssmtpकई Sendmail रैपर में से सिर्फ एक है। ये सभी मानक इनपुट पर एक संदेश स्वीकार करते हैं, और वैकल्पिक रूप से कमांड-लाइन तर्कों के रूप में पते की एक सूची देते हैं, और वे सभी एक बाइनरी नामित करते हैं, sendmailजो पारंपरिक Sendmail कमांड-लाइन एपीआई को कम से कम (कम से कम बुनियादी विशेषताओं) लागू करता है। लेकिन ठीक से बोलने पर, उस संदेश को अच्छी तरह से गठित RFC822 संदेश होना चाहिए। कम से कम, इसमें Subject:हेडर होना चाहिए ।

ssmtp address@example.com <<<$'Subject: testing 1...2...3'

(के साथ ssmtp, sendmailसिर्फ़ एक सिम्लिंक है ssmtp। पोस्टफ़िक्स, एक्ज़िम, और मेरा मानना ​​है कि हर दूसरे एमटीए Provides: mail-transport-agentकी एक समान व्यवस्था है, सिवाय इसके sendmailकि sendmailबाइनरी "वास्तविक बात" है।

अधिक सामान्यतः, आप एक साधारण ईमेल संदेश को एक साथ यहाँ दस्तावेज़ के साथ रख सकते हैं।

/usr/lib/sendmail -oi -t <<____HERE
Subject: testing
To: recipient@example.net

Here we interpolate the shell variable $result
____HERE

(सेंडमेल -tविकल्प आपको मानक इनपुट पर प्राप्त संदेश के हेडर से प्राप्तकर्ता सूची लेने के लिए कहता है । सेंडमेल का सटीक मार्ग प्लेटफार्मों के बीच भिन्न होगा।)

एक और सामान्य बदलाव कुछ कमांड के आउटपुट को संयोजित करना है। ध्यान रखें कि हेडर और संदेश शरीर के बीच एक खाली रेखा ("गर्दन") हो।

( printf "Subject: random number\n\n"
  dd if=/dev/urandom bs=4 count=1 2>/dev/null | od -D -An ) |
sendmail elsewhere@example.org

बहुत ही सरल ASCII पाठ-केवल संदेशों से परे किसी भी चीज़ के लिए, आपको यह समझने की आवश्यकता है कि एक उचित MIME संदेश कैसे लिखें, जिस बिंदु पर यह आमतौर पर एक उपकरण का उपयोग करने के लिए अधिक समझ में आता है mutt। कुछ प्लेटफार्मों में एक mailया mailxजो कि अटैचमेंट और गैर-एएससीआईआई पाठ भेजने का तरीका जानता है, लेकिन यह पूरी तरह से पोर्टेबल नहीं है।

यहां चुनौती एक ग्राहक को नहीं मिल रही है जो ईमेल संदेश ले सकता है और इसे भेजने का प्रयास कर सकता है, इसे जीमेल की बारीकियों के लिए कॉन्फ़िगर करना है, जिसके लिए दूरस्थ सर्वर के लिए उपयोग करने के लिए उपयोगकर्ता का नाम और पासवर्ड जानना होगा। इसे निवर्तमान स्मार्तोस्त के रूप में उपयोग करने में सक्षम होने के लिए।

पर्दे के पीछे, अधिकांश ग्राहक जैसे mutt, mailxआदि आमतौर पर sendmailसिस्टम से संदेश प्राप्त करने के लिए पर्दे के पीछे भागते हैं ।


मैं सीधे Sendmail का उपयोग करने के साथ बहुत किस्मत नहीं है; इसलिए ssmtp की ओर मुड़ना। अपने जवाब के लिए अपवोट करें। वैसे, अनुलग्नकों के रूप में चित्र भेजने के लिए मुझे सबसे सरल तरीका पसंद आया। मुझे MIME के ​​बारे में सोचना भी नहीं चाहिए। मैं सिर्फ mpack का उपयोग करता हूं, जैसा कि यहां वर्णित है: unix.stackexchange.com/questions/381131/…
SDSolar

8

ओपी के स्वयं के उत्तर में जोड़ना:

कॉन्फ़िगर करते समय ssmtp, आप उपयोगकर्ताओं को From को परिभाषित करने से मना या अनुमति दे सकते हैं, और डोमेन को ओवरराइड भी कर सकते हैं; आप ऐसा करना चाहते हैं कि स्पैम फ़ोल्डर में संदेश न आने सहित कई कारणों से।

आप इसमें जोड़ सकते हैं /etc/ssmtp/ssmtp.conf:

# Where will the mail seem to come from?
rewriteDomain=my_internet_domain.uk

# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
FromLineOverride=YES

कृपया ध्यान दें कि YES का उपयोग होम रास्पबेरी में किया जा सकता है, लेकिन सुरक्षा के दृष्टिकोण से यह बहु-उपयोगकर्ता प्रणाली में उचित नहीं हो सकता है।


वोट दें। बहुत बढ़िया जानकारी।
एसडीसोलर

5

"मेल" में क्या गलत है?

गूंज "वहाँ हाय" | mail -s "महत्वपूर्ण मेल" user@example.com

"मेल" होने / आदि / बीएसएसडी-मेलएक्स पैकेज से / usr / bin / bsd-mailx के लिए वैकल्पिक लिंक। मेरा मानना ​​है कि यह डिफ़ॉल्ट रूप से है। उदाहरण के लिए, क्रोन स्क्रिप्ट से मेल भेजने के लिए महान उपयोगिता।

उबंटू और फ्रीबीएसडी पर भी काम करता है।


3
mailxबस एक अंत है। स्थानीय प्रणाली से संदेश प्राप्त करने के लिए कुछ एमटीए को कॉन्फ़िगर करना आवश्यक है। आम उपयोग में कई असंगत संस्करण हैं, हालांकि यदि आपका लक्ष्य प्लेटफॉर्म केवल डेबियन है, तो आप यथोचित बीएसडी व्यवहार पर भरोसा कर सकते हैं।
ट्रिपलआई

4

मैं वास्तव में mailxइस के लिए उपयोग करने के लिए आंशिक हूँ :

echo "Message body." | mailx -s "Subject line" -a /path/attachment.txt -r "Sender's Name<sender@email.com>" -c recipient2@email.com recipient1@email.com

1
यहां कई विकल्प कई गैर-डेबियन / गैर-बीएसडी प्रणालियों पर उपलब्ध नहीं होंगे। -aविशेष रूप से विकल्प अद्भुत हो सकता है अगर उसे वैश्विक रूप से समर्थन किया गया था, लेकिन सिर्फ ब्राउज़ mailxदेखने के लिए कि यह काफी निश्चित रूप से मामला नहीं है यहाँ सवाल।
ट्रिपल

2

मैं बाहरी प्रदाता के SMTP सर्वर के माध्यम से सरल स्वचालित ई-मेल भेजने के लिए sendEmail का उपयोग करता हूं:

sendEmail -q -f "me@mail.com" -u "mySubject" -t "someone@mail.org" -s "my.smtp.com" -o tls=yes -xu "mySmtpUser" -xp "mySmtpPw" -m "myMessage"

मैं एक लाइन पर सब कुछ पास करता हूं, इसलिए कमांड लाइन पर ऐसा करने से सभी उपयोगकर्ताओं को सभी पैरामीटर (smtp पासवर्ड सहित) दिखाई देंगे, अगर वे ps -efथोड़ी देर के लिए कमांड चलाते हैं। मैं इसे शेल स्क्रिप्ट के भीतर उपयोग करता हूं।


1
यह एक मानक स्थापित नहीं है, और इस नाम के साथ कई ग्राहक हैं। मुझे लगता है कि आप en.wikipedia.org/wiki/SendEmail का जिक्र कर रहे हैं । क्या यह डेबियन पैकेज के रूप में उपलब्ध है?
ट्रिपलआई

शेल-स्क्रिप्ट के बारे में अच्छी सोच, जैसे मल्टी-यूज़र सिस्टम। मुझे पसंद है कि मेरा पासवर्ड मशीन के हिम्मत में एक फ़ाइल में है। मैं केवल यह चाहता हूं कि मैं स्पष्ट पाठ के बजाय एक हैशेड पासवर्ड संग्रहीत कर सकूं।
एसडीसोलर

: मैं इस पैकेज के लिए बात कर रहा था packages.debian.org/search?keywords=sendemail
user684790

1
मुझे यह उत्तर नहीं दिखा रहा है कि यह मूल प्रश्न में निर्दिष्ट gmail के साथ काम करता है।
एसडीसोलर

यह gmail के साथ काम करता है, उदा: `-s smtp.gmail.com -o tls = yes -xp your_gmail_password -s smtp.gmail.com: 587`
rogerdpack

1

मेरा सर्वर CEntOS 7 है, और इसमें सेंडमेल है, लेकिन मेलक्स आदि नहीं है। बल्कि सीधे एक नए प्रोग्राम को इंस्टॉल करने की बजाय मैंने सीधे सेंडमेल का उपयोग करके परीक्षण किया, और पाया कि यह काम करता है:

echo -e "From: you@whatever\nTo: you@gmail.com\nSubject: this is the subject\n\nThis is the body,\nwith multiple lines." | sendmail -t

मेरे लिए यह एक छोटा ईमेल भेजने का सबसे सरल तरीका लगता है, क्योंकि इसमें सर्वर या डेमॉन को चलाने या कॉन्फ़िगर करने की आवश्यकता नहीं होती है, और इसे एक ही कमांड लाइन में किया जा सकता है।

यह विचार यह है कि एक संदेश बस मुझे चेतावनी देगा कि एक निश्चित कार्यक्रम ने एक त्रुटि फेंक दी, बिना किसी संभावित गोपनीय जानकारी के, और फिर मैं एसएसएच को सर्वर पर इसके लॉग का निरीक्षण करने के लिए तैयार करूंगा। इस तरह फाइलों को अटैच करने या ट्रांसपोर्ट को एन्क्रिप्ट करने जैसी जटिलताओं से परेशान होने की जरूरत नहीं है।

टिप्पणियाँ:

  • -e गूंज को '\ n' और अन्य पलायन की व्याख्या करता है।
  • -t संदेश भेजने वाले में 'To:' से प्राप्तकर्ता पते प्राप्त करने के लिए Sendmail बताता है।
  • यदि मेल नहीं आता है, तो tail /var/log/maillogत्रुटि संदेशों को देखने के लिए उपयोग करें।
  • यदि आपके gmail पते पर भेजा जा रहा है, तो उन्हें जंक फ़ोल्डर से बाहर रखने के लिए gmail पर एक फ़िल्टर बनाएं।
  • यह Sendmail वास्तव में 'sendmail.postfix' है (जो सामान्य हो सकता है); यहाँ एक आदमी पेज है

1
आपके सिस्टम में MTA स्थापित होना चाहिए जो कि साथ काम कर रहा है sendmail - लेकिन मुझे यह उत्तर प्रदर्शित नहीं होता है कि यह मूल प्रश्न में निर्दिष्ट gmail के साथ काम करता है ...
SDsolar

@SDsolar आप सही हैं। मेरे सर्वर पर पोस्टफ़िक्स चल रहा है, और मुझे नहीं पता था। लगता है जैसे यह सेंटोस इंस्टॉल के साथ मानक है; शायद DigitalOcean ने इसे कॉन्फ़िगर किया है। यह एक सार्वजनिक बंदरगाह पर नहीं सुन रहा है। जैसा कि जीमेल के माध्यम से भेजने के लिए, मेरा कहना यह है कि आपको अपने सर्वर से सीधे भेजने की आवश्यकता नहीं है, यदि आप केवल खुद को भेज रहे हैं। (मैं अपना सवाल पूछ सकता हूं और इस जवाब को आगे
बढ़ा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.