मैं लिनक्स कमांड लाइन का उपयोग करके ईमेल अनुलग्नक के रूप में एक फ़ाइल कैसे भेजूं?


289

मैंने एक स्क्रिप्ट बनाई है जो हर रात मेरे लिनक्स सर्वर पर चलती है जो मेरे mysqldumpप्रत्येक MySQL डेटाबेस को .sql फ़ाइलों का बैकअप लेने के लिए उपयोग करती है और उन्हें एक संपीड़ित .tar फ़ाइल के रूप में एक साथ पैकेज करती है। अगला चरण जिसे मैं पूरा करना चाहता हूं, वह है कि टार फाइल को ईमेल के माध्यम से एक सुरक्षित ईमेल सर्वर को सुरक्षित रखने के लिए भेजना। मैं बॉडी में कच्ची स्क्रिप्ट भेजने के लिए बैकअप टेक्स्ट फ़ाइल को mailxपसंद करके ईमेल भेजने में सक्षम हूं :

$ cat mysqldbbackup.sql | mailx backup@email.com

catबैकअप फ़ाइल के पाठ को प्रतिध्वनित करता है जिसे mailxप्रोग्राम में प्राप्तकर्ता के ईमेल पते के साथ एक तर्क के रूप में दिया जाता है।

जबकि पूरा करता कि मैं क्या जरूरत है, मैं इसे एक कदम बेहतर हो सकता है लगता है, है, वहाँ कोई तरीका है शेल स्क्रिप्ट या अन्यथा, का उपयोग कर एक के रूप में एक निवर्तमान ईमेल संदेश के साथ संकुचित .tar फ़ाइल भेजने के लिए लगाव ? यह बहुत लंबे ईमेल संदेशों से निपटने के लिए होता है जिसमें हेडर डेटा होता है और अक्सर शब्द-रैपिंग मुद्दे आदि होते हैं।


1
क्या आप उस स्क्रिप्ट को साझा कर सकते हैं जो आपके MySQL डेटाबेस का बैकअप लेती है?
अल्मिनो मेलो

क्षमा करें, मैं अभी कुछ समय से ऐसा नहीं कर रहा हूं। मुझे पता है कि इसमें शामिल होना mysqldumpऔर फिर आउटपुट को एक ईमेल के साथ संलग्न करना (साथ mutt)। मैं भी एक कदम है कि एक ज़िप / tar.gz के रूप में अच्छी तरह से उत्पादन संकुचित कर सकते हैं ...
किट Roed

1
विशुद्ध रूप से जिज्ञासु, अपने बैकअप बनाम scp या rsync क्यों ईमेल करें?
jchook

जवाबों:


298

मेरे लिए किसी भी व्यक्ति ने काम नहीं किया। यह सोच रहा था कि ईमेल एड्रेस अटैचेमेन्ट का हिस्सा था। करना था:

echo "This is the message body" | mutt -a "/path/to/file.to.attach" -s "subject of message" -- recipient@domain.com

1
मैं म्यूट 1.5.21 (2010-09-15) का उपयोग कर रहा हूं और इसे प्राप्तकर्ता ईमेल के बाद -a पैरामीटर की आवश्यकता है
nurettin

OpenSUSE लीप 42.1 पर म्यूट 1.5.24 (2015-08-30) का उपयोग करके मेरे लिए काम किया।
एंटोनियो विनीसियस मेनेजेस मेडी

3
@fugitive का अर्थ है "विकल्पों का अंत"। Unix.stackexchange.com/questions/11376/…
rynop

क्या अपवादों की जांच करने और भेजने का पुन: प्रयास करने का कोई तरीका है?
ti034

79

या, म्यूट करने में विफल:

gzip -c mysqldbbackup.sql | uuencode mysqldbbackup.sql.gz  | mail -s "MySQL DB" backup@email.com

26
यह uuencoded part इनलाइन भेजता है न कि अटैचमेंट के रूप में । कई मेल-क्लाइंट इसे पहचानते हैं और एक संलग्नक के रूप में uuencoded भाग प्रदर्शित करते हैं।
फुएपी जूल 6'11

4
इस दिन और उम्र में uuencode का उपयोग न करें। MIME थोड़ा अधिक जटिल है लेकिन बहुत अधिक उपयोगकर्ता के अनुकूल है।
18

@DavidGiven: उदाहरण के लिए देखें (त्वरित नज़र से) इस प्रश्न के अन्य सभी उत्तर।
20

6
उनमें से कोई भी मेल का उपयोग नहीं करता है!
डेविड ने

इसके बाद stackoverflow.com/questions/3317174/… और text/htmlजो भी MIME प्रकार आपके अनुलग्नक के लिए समझ में आता है उसे प्रतिस्थापित करता है। (इस ठोस उदाहरण के लिए, मेरा अनुमान है application/gzip।)
ट्रिपल

43

आपके लिनक्स के संस्करण के आधार पर इसे मेल कहा जा सकता है। ऊपर @David उद्धृत करने के लिए:

mail -s "Backup" -a mysqldbbackup.sql backup@email.com < message.txt

या भी:

cat message.txt | mail -s "Backup" -a mysqldbbackup.sql backup@email.com 

@ KarelBílek: दूसरे विकल्प के बारे में कैसे?
नाथन फेलमैन 7

दोनों समाधान मेरे लिए काम नहीं करते हैं। मुझे ईमेल 2013 आउटलुक के साथ मिला और मेल में केवल फ़ाइल नाम शामिल है
निकेल 715

2
मेरा पठन पृष्ठ पढ़ता है:-a, --append=HEADER: VALUE append given header to the message being sent
प्रवचन २

2
नाथन, ऐसा लग रहा है कि डेविड से आपका उद्धरण गलत है - उसने muttआदेश का उपयोग किया , नहीं mail। जैसा कि दूसरों ने बताया है, म्यूट अब --पता से पहले एक तर्क की आवश्यकता लगती है । और मैं देखता हूं कि @exhuma और मैं वास्तव में इस बात पर सहमत हूं कि -aविकल्प क्या mailहै - मैं एक मिनट के लिए वहां भ्रमित हो गया;)
nealmcb

7
इसके बजाय -a का उपयोग आपको करना चाहिए: -a, --append=HEADER: VALUE append given header to the message being sent -A, --attach=FILE attach FILE
विक्टर पेरोव

41

देखने से man mailx, mailx प्रोग्राम में फ़ाइल अटैच करने का विकल्प नहीं होता है। आप अन्य प्रोग्राम जैसे म्यूट का उपयोग कर सकते हैं।

echo "This is the message body" | mutt -a file.to.attach -s "subject of message" recipient@domain.com

म्यूट के लिए कमांड लाइन विकल्प के साथ दिखाया जा सकता है mutt -h


धन्यवाद! वह चाल चली, मुझे चुपचाप कार्रवाई करने के लिए म्यूट होने में परेशानी हो रही थी।
किट रोएड

10
नीचे उत्तर देखें ( stackoverflow.com/a/9524359/10608 ) क्योंकि जाहिरा तौर पर म्यूट के लिए वाक्यविन्यास बदल गया था जिसे अब एक की आवश्यकता है --
अलेक्जेंडर बर्ड

29

मैं SendEmail का उपयोग करता हूं, जो इस परिदृश्य के लिए बनाया गया था। यह उबंटू के लिए पैक किया गया है, इसलिए मुझे लगता है कि यह उपलब्ध है

sendemail -f sender@some.where -t receiver@some.place -m "Here are your files!" -a file1.jpg file2.zip

http://caspian.dotconf.net/menu/Software/SendEmail/


मेरा मानना ​​है कि, यह आपके उदाहरण में "sendemail" के बजाय "sendEmail" होना चाहिए।
डेविट

1
हां और नहीं - स्रोत (कैस्पियन) एक अपरकेस ई का उपयोग करता है, जबकि यह कमांड लाइन टूल्स (यूनिक्स दुनिया में) के लिए असामान्य नामकरण रणनीति है, कम से कम इस सॉफ्टवेयर की उबंटू पैकेजिंग दोनों प्रदान करता है sendemailऔर sendEmailमें /usr/bin/
फ्रेड्रिक वेंड्ट

मेरा Xubuntu 14.04.3 स्थापित नहींSendEmail
विटाली Zdanevich

3
"sudo apt install sendemail", sendemail को इनस्टॉल करने के लिए और "-f अनिवार्य@email.com" जोड़ने के लिए कमांड से कार्य करने के लिए फ़ील्ड से अनिवार्य है। sendemail -f mandatory@email.com-t to@some.one -m "Here are your files!" -a file1.jpg file2.zip
सेलेंद्र पिनुपोलु

28

मैं एमपैक का इस्तेमाल करता हूं।

mpack -s subject file user@example.com

दुर्भाग्य से mpack पहचान नहीं करता है '-' स्टड के लिए एक उपनाम के रूप में। लेकिन निम्नलिखित काम, और आसानी से एक (खोल) उपनाम या एक स्क्रिप्ट में लपेटा जा सकता है:

mpack -s subject /dev/stdin loser@example.com < file

यह स्टड के लिए बैश में काम कर सकता है। मेरे पास mpack नहीं है, इसलिए मैंने कोशिश नहीं की है:mpack -s subject /dev/stdin loser@example.com <(stdout_generating_program)
thomasa88

23
 echo 'These are contents of my mail' | mailx -s 'This is my email subject' -a /path/to/attachment_file.log email_id@example.com

4
यह स्वीकृत उत्तर होना चाहिए। डिफ़ॉल्ट mailx का उपयोग करता है और पूरी तरह से काम करता है। मटन v1.5.21 क्रोन का उपयोग करते समय> 1MB संलग्नक भेजने से इनकार करता है।
जोसेफ

मुझे ईसी 2 में काम करने वाली चीज़ की तलाश थी और यह ठीक काम कर गई।
विलक्षण

6
mailxठीक से मानकीकृत नहीं है। कोई भी जवाब जो इसकी सिफारिश करता है उसे इस चेतावनी को इंगित करना चाहिए। आम उपयोग में कम से कम तीन असंगत संस्करण हैं।
ट्रिपलए

13

मैंने एक बार सोलारिस पर ksh के लिए यह फ़ंक्शन लिखा था (बेसल एन्कोडिंग के लिए पर्ल का उपयोग करता है):

# usage: email_attachment to cc subject body attachment_filename
email_attachment() {
    to="$1"
    cc="$2"
    subject="$3"
    body="$4"
    filename="${5:-''}"
    boundary="_====_blah_====_$(date +%Y%m%d%H%M%S)_====_"
    {
        print -- "To: $to"
        print -- "Cc: $cc"
        print -- "Subject: $subject"
        print -- "Content-Type: multipart/mixed; boundary=\"$boundary\""
        print -- "Mime-Version: 1.0"
        print -- ""
        print -- "This is a multi-part message in MIME format."
        print -- ""
        print -- "--$boundary"
        print -- "Content-Type: text/plain; charset=ISO-8859-1"
        print -- ""
        print -- "$body"
        print -- ""
        if [[ -n "$filename" && -f "$filename" && -r "$filename" ]]; then
            print -- "--$boundary"
            print -- "Content-Transfer-Encoding: base64"
            print -- "Content-Type: application/octet-stream; name=$filename"
            print -- "Content-Disposition: attachment; filename=$filename"
            print -- ""
            print -- "$(perl -MMIME::Base64 -e 'open F, shift; @lines=<F>; close F; print MIME::Base64::encode(join(q{}, @lines))' $filename)"
            print -- ""
        fi
        print -- "--${boundary}--"
    } | /usr/lib/sendmail -oi -t
}

8
GNU / Linux पर, कोई base64एन्कोडिंग के लिए perl के बजाय कमांड का उपयोग कर सकता है
MestreLion

12

आप अटैचमेंट के साथ ईमेल भेजने के लिए म्यूट का उपयोग कर सकते हैं

mutt -s "Backup" -a mysqldbbackup.sql backup@email.com < message.txt

2
कम से कम म्यूट 1.5.21 (उबंटू भरोसेमंद) के रूप में, आपको -aप्राप्तकर्ता के बाद विकल्प लगाने की आवश्यकता है : mutt -s "Backup" backup@email.com -a mysqldbbackup.sql < message.txtया --प्राप्तकर्ता से पहले विकल्प का उपयोग करें जैसा कि रेनप के उत्तर में दिखाया गया है।
nealmcb

10

मेल के साथ एक सादे संदर्भ के साथ एक प्लेनटेक्स्ट बॉडी ईमेल भेजें:

(
  /usr/bin/uuencode attachfile.txt myattachedfilename.txt; 
  /usr/bin/echo "Body of text"
) | mailx -s 'Subject' youremail@gmail.com

नीचे नई कमांड के बिना ऊपर की तरह ही कमांड है

( /usr/bin/uuencode /home/el/attachfile.txt myattachedfilename.txt; /usr/bin/echo "Body of text" ) | mailx -s 'Subject' youremail@gmail.com

सुनिश्चित करें कि आपके पास /home/el/attachfile.txtइस सामग्री के साथ परिभाषित एक फाइल है:

<html><body>
Government discriminates against programmers with cruel/unusual 35 year prison
sentences for making the world's information free, while bankers that pilfer 
trillions in citizens assets through systematic inflation get the nod and 
walk free among us.
</body></html>

यदि आपके पास uuencode नहीं है तो इसे पढ़ें: /unix/16277/how-do-i-get-uuencode-to-work

लिनक्स पर, Sendmail के साथ एक पीडीएफ अटैचमेंट के साथ HTML बॉडी ईमेल भेजें:

सुनिश्चित करें कि आपने ksh स्थापित किया है: yum info ksh

सुनिश्चित करें कि आपके पास सेंडमेल स्थापित और कॉन्फ़िगर है।

सुनिश्चित करें कि आपके पास uuencode स्थापित और उपलब्ध है: /unix/16277/how-do-i-get-uuencode-to-work

नामक एक नई फ़ाइल बनाएं test.shऔर इसे अपनी होम निर्देशिका में डालें:/home/el

निम्नलिखित कोड डालें test.sh:

#!/usr/bin/ksh
export MAILFROM="el@defiant.com"
export MAILTO="youremail@gmail.com"
export SUBJECT="Test PDF for Email"
export BODY="/home/el/email_body.htm"
export ATTACH="/home/el/pdf-test.pdf"
export MAILPART=`uuidgen` ## Generates Unique ID
export MAILPART_BODY=`uuidgen` ## Generates Unique ID

(
 echo "From: $MAILFROM"
 echo "To: $MAILTO"
 echo "Subject: $SUBJECT"
 echo "MIME-Version: 1.0"
 echo "Content-Type: multipart/mixed; boundary=\"$MAILPART\""
 echo ""
 echo "--$MAILPART"
 echo "Content-Type: multipart/alternative; boundary=\"$MAILPART_BODY\""
 echo ""
 echo "--$MAILPART_BODY"
 echo "Content-Type: text/plain; charset=ISO-8859-1"
 echo "You need to enable HTML option for email"
 echo "--$MAILPART_BODY"
 echo "Content-Type: text/html; charset=ISO-8859-1"
 echo "Content-Disposition: inline"
 cat $BODY
 echo "--$MAILPART_BODY--"

 echo "--$MAILPART"
 echo 'Content-Type: application/pdf; name="'$(basename $ATTACH)'"'
 echo "Content-Transfer-Encoding: uuencode"
 echo 'Content-Disposition: attachment; filename="'$(basename $ATTACH)'"'
 echo ""
 uuencode $ATTACH $(basename $ATTACH)
 echo "--$MAILPART--"
) | /usr/sbin/sendmail $MAILTO

test.shअपना पता और फ़ाइल नाम दर्शाने के लिए निर्यात चर बदलें ।

एक परीक्षण पीडीएफ दस्तावेज़ डाउनलोड करें और इसे /home/elपीडीएफ- test.pdf नामक में डालें

/Home/el/email_body.htm नामक एक फ़ाइल बनाएं और इस लाइन को इसमें डालें:

<html><body><b>this is some bold text</b></body></html>

सुनिश्चित करें कि पीडीएफ फाइल में पर्याप्त 755 अनुमतियां हैं।

स्क्रिप्ट चलाएं ./test.sh

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


1
मेरे लिए इसने दूसरे तरीके से काम किया। (echo 'Email Body'; uuencode filename filename) | mailx -s 'Subject' user@domain.com
विक्की

uuencodeहै ठीक से एक लगाव। यह बस कुछ अन्य पाठ के बीच में पाठ के एक oomputer- पढ़ने योग्य बूँद एम्बेड करता है। जब कोई बेहतर तंत्र नहीं था, तो यह ठीक काम करता था, लेकिन यह 20+ साल पहले था।
ट्रिपल एफ

9

सुझाव देने के लिए यहां कई उत्तर दिए गए हैं mailया mailxइसलिए यह एक ऐसी पृष्ठभूमि है जो आपको संदर्भ में इनकी व्याख्या करने में मदद करती है।

ऐतिहासिक नोट्स

यूनिक्स की उत्पत्ति mailबेल लैब्स यूनिक्स ™ (1969?) के शुरुआती इतिहास के बारे में बताती है , और हम यहां इसकी पूरी वंशावली में जाने की उम्मीद नहीं कर सकते। यह कहने के लिए पर्याप्त है कि ऐसे कई कार्यक्रम हैं जो कोड को विरासत से या फिर से लागू करते हैं (या एक कार्यान्वयन से विरासत कोड) mailऔर यह कि कोई एकल कोड आधार नहीं है जिसे स्पष्ट रूप से "" के रूप में पहचाना जा सकता है mail

हालांकि, उस स्थिति के दावेदारों में से एक निश्चित रूप से "बर्कले मेल" है जिसे मूल रूप Mailसे 2BSD (1978) में एक अपरकेस एम के साथ बुलाया गया था ; लेकिन 3BSD (1979) में, इसने लोअरकेस mailकमांड को भी बदल दिया , जिससे कुछ नई उलझन पैदा हुई। SVR3 (1986) में एक व्युत्पन्न शामिल था जिसे कहा जाता था mailxxशायद यह अद्वितीय और विशिष्ट बनाने के लिए जोड़ा गया था; लेकिन यह भी, अब कॉपी किया गया है, पुन: लागू किया गया है, और कटे-फटे, ताकि कोई एकल व्यक्तिगत संस्करण न हो जो कि निश्चित है।

दिन में वापस, इलेक्ट्रॉनिक मेल भर में बायनेरिज़ भेजने के लिए वास्तविक मानक था uuencode। यह अभी भी मौजूद है, लेकिन कई प्रयोज्य समस्याएं हैं; यदि संभव हो तो, आपको इसके बदले MIME अटैचमेंट भेजना चाहिए, जब तक कि आप विशेष रूप से 1980 के दशक के अंत तक संचार करने में सक्षम न हों।

MIME को 1990 के दशक की शुरुआत में ईमेल के साथ कई समस्याओं को हल करने के लिए पेश किया गया था, जिसमें एकल वर्ण सेट में सादे पाठ के अलावा विभिन्न प्रकार की सामग्री के लिए समर्थन शामिल है, जो केवल अंग्रेजी के सबसेट के लिए उपयुक्त है (और, हमें कहा जाता है, हवाईयन )। इसने मल्टीपार्ट संदेश, अंतर्राष्ट्रीयकरण, समृद्ध सामग्री प्रकार, आदि के लिए समर्थन शुरू किया और 1990 के दशक में तेजी से कर्षण प्राप्त किया।

(इस रचना करते समय हिरलूम mail/ mailxइतिहास नोट सबसे अधिक सहायक थे, और निश्चित रूप से एक पढ़ने लायक हैं यदि आप उस तरह के हैं।)

वर्तमान प्रस्ताव

2018 तक, डेबियन के पास तीन पैकेज हैं जिनमें एक mailया mailxकमांड शामिल है। (आप के लिए खोज सकते हैं Provides: mailx)

debian$ aptitude search ~Pmailx
i   bsd-mailx                       - simple mail user agent
p   heirloom-mailx                  - feature-rich BSD mail(1)
p   mailutils                       - GNU mailutils utilities for handling mail

(मैं डेबियन को एक सिफारिश के रूप में नहीं गा रहा हूं; यह वही है जो मैं उपयोग करता हूं, इसलिए मैं इससे परिचित हूं; और यह उनके संबंधित पैकेज नामों का उल्लेख करके विभिन्न विकल्पों को स्पष्ट रूप से अलग करने का साधन प्रदान करता है। यह स्पष्ट रूप से डिस्ट्रो भी है। जो उबंटू को ये पैकेज मिलते हैं।)

  • bsd-mailxएक अपेक्षाकृत सरल है mailxजो MIME संलग्नक भेजने का समर्थन करने के लिए प्रकट नहीं होता है। इसका मैनुअल पेज देखें और ध्यान दें कि यह वह है जो आप एक * बीएसडी सिस्टम पर मैकओएस सहित, डिफ़ॉल्ट रूप से खोजने की उम्मीद करेंगे।
  • heirloom-mailxअब बुलाया जा रहा है s-nailऔर MIME अनुलग्नकों को भेजने का समर्थन करता है-a । इसका मैनुअल पृष्ठ और अधिक सामान्यतः हीरलूम परियोजना देखें
  • mailutilsउर्फ जीएनयू Mailutils एक भी शामिल है mail/ mailxअनुकूलता आवरण जो करता है समर्थन भेजने के साथ माइम संलग्नक-A

इन चिंताओं के साथ, यदि आपको अपने कोड को पोर्टेबल होने की आवश्यकता है और कुछ हद तक जटिल पैकेज पर निर्भर कर सकते हैं, तो MIME संलग्नक को आंशिक रूप से भेजने का सरल तरीका उपयोग करना है mutt


मैंने इसे मूल रूप से एक लोकप्रिय लोकप्रिय डुप्लिकेट प्रश्न stackoverflow.com/questions/902591/… के
ट्रिपल

4

एक अन्य विकल्प - स्वाक्स (एसएमटीपी के लिए स्विस आर्मी नाइफ)।

swaks -tls \
    --to ${MAIL_TO} \
    --from ${MAIL_FROM} \
    --server ${MAIL_SERVER} \
    --auth LOGIN \
    --auth-user ${MAIL_USER} \
    --auth-password ${MAIL_PASSWORD} \
    --header "Subject: $MAIL_SUBJECT" \
    --header "Content-Type: text/html; charset=UTF-8" \
    --body "$MESSAGE" \
    --attach mysqldbbackup.sql

2

metamail के पास उपकरण metasend है

metasend -f mysqlbackup.sql.gz -t backup@email.com -s Backup -m application/x-gzip -b

यह लगभग हर जगह स्थापित किया जाता था, लेकिन लगभग कभी भी उपयोग नहीं किया गया। क्योंकि यह लंबे समय तक (और अभी भी AFAIK है) इसे कई प्लेटफार्मों पर वास्तविक मानक टूलसेट से हटा दिया गया था ।
ट्रिपल जू

2

मैंनें इस्तेमाल किया

echo "Start of Body" && uuencode log.cfg readme.txt | mail -s "subject" "a@b.c" 

और इसने मेरे लिए अच्छा काम किया ...।


1

मैं आमतौर पर केवल RHEL पर मेल कमांड का उपयोग करता हूं। मैं mailx की कोशिश की है और यह बहुत कुशल है।

mailx -s "Sending Files" -a First_LocalConfig.conf -a
Second_LocalConfig.conf Recipient@myemail.com

This is the content of my msg.

.

1

मेरे लिए सबसे छोटा रास्ता है

file=filename_or_filepath;uuencode $file $file|mail -s "optional subject" email_address

तो आपके उदाहरण के लिए यह होगा

file=your_sql.log;gzip -c $file;uuencode ${file}.gz ${file}|mail -s "file with magnets" ph.gachoud@gmail.com

अच्छी बात यह है कि मैं इसे Ctrl + r के साथ एक और फ़ाइल भेजने के लिए याद कर सकता हूं ...


ब्रेसिज़ आपको बहुत अच्छा नहीं करेंगे लेकिन पूरी तरह से पोर्टेबल होने के लिए आपको चर के आसपास दोहरे उद्धरण चिह्नों का उपयोग करना चाहिए। यह भी देखें stackoverflow.com/questions/10067266/...
tripleee

1

स्रोत मशीन से

mysqldump --defaults-extra-file=sql.cnf database | gzip | base64 | mail me@myemail.com

गंतव्य मशीन पर। प्राप्त मेल बॉडी को db.sql.gz.b64 के रूप में सहेजें ; फिर..

base64 -D -i db.sql.gz.b64 | gzip -d | mysql --defaults-extra-file=sql.cnf

0

बस अपने 2 सेंट जोड़ने के लिए, मैं अपनी खुद की PHP स्क्रिप्ट लिखूंगा:

http://php.net/manual/en/function.mail.php

उस पृष्ठ पर उदाहरणों में अनुलग्नक करने के बहुत सारे तरीके हैं।


2
हर सर्वर में PHP स्थापित नहीं हो सकता है। यदि आप वास्तव में "अपनी खुद की स्क्रिप्ट लिखना" पथ से नीचे जाना चाहते हैं, तो पर्ल या अजगर बहुत बेहतर अनुकूल हैं क्योंकि वे आमतौर पर डिफ़ॉल्ट रूप से उपलब्ध हैं।
14

shऔर भी सर्वव्यापी है। अच्छे उदाहरणों के साथ उत्तर के साथ नकली प्रश्न हैं; यह रहा मेरा।
ट्रिपलए

0

mailx-aसंलग्नक के लिए अब एक विकल्प है।


2
"-A" विकल्प हेडर के लिए है
यवेस मार्टिन

मैन मेल [x], 10/9/10 का संस्करण 12.5 (कुछ साल पहले) स्पष्ट रूप से कहता है -a फ़ाइल दी गई फ़ाइल को संदेश में संलग्न करें
।`

4
के कुछ संस्करण mailx। मेरा मानना ​​है कि दो कार्यान्वयन हैं। एक -aमें संलग्नक के लिए है, दूसरे पर यह हेडर के लिए है।
14

1
Ubuntu में mailx का संस्करण GNU से आता है और वहाँ -a का मतलब हैडर जोड़ना है। manpages.ubuntu.com/manpages/lucid/en/man1/mailx.1.html कौन सा सिस्टम और कौन सा मेल एक अनुलग्नक करता है?
nealmcb

3
नए कार्यान्वयन में "-ए"
हेडर्स के

0

ईमेल भेजने की कोई विधि नहीं है, लेकिन आप उसके लिए एक ऑनलाइन Git सर्वर (जैसे Bitbucket या एक समान सेवा) का उपयोग कर सकते हैं।

इस तरह, आप git pushकमांड का उपयोग कर सकते हैं , और सभी संस्करणों को एक संपीड़ित और संगठित तरीके से संग्रहीत किया जाएगा।


0

यह मैं CentOS में एक बड़ी लॉग फ़ाइल के साथ कर रहा हूँ:

MAIL="`whereis mail | awk '{print $2}'`"
WHOAMI="`whoami`"
HOSTNAME="`hostname`"
EMAIL"your@email.address"
LOGDIR="/var/log/aide"
LOGNAME="`basename "$0"`_`date "+%Y%m%d_%H%M"`"
# Arhiveerime ning kui hästi, saadame edasi:
/bin/tar -zcvf ${LOGDIR}/${LOGNAME}.tgz "${LOGDIR}/${LOGNAME}.log" > /dev/null 2>&1
if [ $? -eq 0 ]; then
    cd ${LOGDIR}
    # This works too. The message content will be taken from text file below
    # echo 'Hello!' >/root/scripts/audit_check.sh.txt
    # echo "Arhiivifail manuses" | ${MAIL} -s "${HOSTNAME} Aide report" -q /root/scripts/audit_check.sh.txt -a ${LOGNAME}.tgz -S from=${WHOAMI}@${HOSTNAME} ${EMAIL}
    echo "Arhiivifail manuses" | ${MAIL} -s "${HOSTNAME} Aide report" -a ${LOGNAME}.tgz -S from=${WHOAMI}@${HOSTNAME} ${EMAIL}
    /bin/rm "${LOGDIR}/${LOGNAME}.log"
fi

तुम क्यों परिभाषित कर रहे हैं WHOAMIऔर HOSTNAME दो बार?
डेविड सी। रैंकिन

इसमें कई शेल कोडिंग शैली की गलतियाँ हैं। shellcheck.net कुछ को इंगित करेगा, लेकिन सभी को नहीं।
ट्रिपल

0

यदि फ़ाइल पाठ है, तो आप इसे शरीर में सबसे आसान तरीके से भेज सकते हैं:

sendmail recipient@example.com < message.txt

1
यह इसे अनुलग्नक के रूप में, या संदेश निकाय के रूप में भी नहीं भेजता है। Sendmail को उम्मीद है कि उसका इनपुट एक संपूर्ण, अच्छी तरह से गठित RFC5322 ईमेल संदेश होगा, और अगर यह नहीं है तो दिलचस्प तरीकों से विफल हो सकता है।
ट्रिपल एफ

0

mailx कमांड का उपयोग करना

 echo "Message Body Here" | mailx -s "Subject Here" -a file_name user@example.com

सेंडमेल का उपयोग करना

#!/bin/ksh

fileToAttach=data.txt

`(echo "To: user@company.com"
  echo "Cc: user@company.com"
  echo "From: Application"
  echo "Subject: your subject"
  echo  your body
  uuencode $fileToAttach $fileToAttach
  )| eval /usr/sbin/sendmail -t `;

1
sendmail एक अच्छा उदाहरण है, खुशी है कि मैंने इसे यहाँ पाया।
होन्जा पी।

ध्यान दें कि आपको "अपने शरीर" की शुरुआत में एक खाली लाइन की आवश्यकता है, अन्यथा शरीर हेडर में गायब हो जाएगा, या संभवतः संदेश को पूरी तरह से तोड़ देगा। इसके अलावा uuencodeMIME के ​​पक्ष में बचने के बारे में नोट कहीं और देखें ।
ट्रिपल जू

और राक्षसी evalऔर रहस्य पूरे गर्भनिरोधक के आसपास backticks यहाँ पूरी तरह से अनावश्यक हैं।
ट्रिपल जू

0

Mailutils इसे केक का एक टुकड़ा बनाता है

echo "Body" | mail.mailutils -M -s "My Subject" -A attachment.pdf mail@example.org
  • -A file एक फ़ाइल संलग्न करता है
  • -M MIME को सक्षम करता है, ताकि आपके पास एक अनुलग्नक और सादा शरीर हो सके।

यदि अभी तक स्थापित नहीं है, तो चलाएं

sudo apt install mailutils

0

आपके मेल कमांड विकल्पों पर निर्भर करता है ( man mailआप इसे देखें ) और संस्करण जो आप कर सकते हैं

echo yourBody|mail -s yoursubject -A /your/attachment/file john@doe.com


ऐसा लगता है कि कुछ भी नया जोड़े बिना मौजूदा उत्तरों की नकल करना, विशेष रूप से -Aविकल्प GNU mailutilsसंस्करण के लिए विशिष्ट है, mailजैसा कि मेरे उत्तर में और साथ ही @ rumpel
tripleee

-1

यदि म्यूट काम नहीं कर रहा है या स्थापित नहीं है, तो यह कोशिश करें-

*#!/bin/sh

FilePath=$1
FileName=$2
Message=$3
MailList=$4

cd $FilePath

Rec_count=$(wc -l < $FileName)
if [ $Rec_count -gt 0 ]
then
(echo "The attachment contains $Message" ; uuencode $FileName $FileName.csv ) | mailx -s "$Message" $MailList
fi*
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.