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




लिनक्स ऑपरेटिंग सिस्टम की विशेषता (20)

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

$ cat mysqldbbackup.sql | mailx [email protected]

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

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


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

mutt -s "Backup" -a mysqldbbackup.sql [email protected] < message.txt

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

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

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


या, म्यूट विफल रहा है:

gzip -c mysqldbbackup.sql | uuencode mysqldbbackup.sql.gz  | mail -s "MySQL DB" [email protected]

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

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

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

हालांकि, उस स्थिति के दावेदारों में से एक निश्चित रूप से "बर्कले मेल" है जिसे मूल रूप से 2BSD (1 9 78) में अपरकेस एम के साथ Mail कहा जाता था; लेकिन 3BSD (1 9 7 9) में, यह लोअरकेस mail कमांड को भी बदल दिया, जिससे कुछ नया भ्रम पैदा हुआ। एसवीआर 3 (1 9 86) में एक व्युत्पन्न शामिल था जिसे mailx कहा जाता था। x को संभवतः अद्वितीय और विशिष्ट बनाने के लिए जोड़ा गया था; लेकिन यह भी अब कॉपी, अनुपूरक और विचलित हो गया है ताकि कोई भी व्यक्तिगत संस्करण निश्चित न हो।

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

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

( mailx 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

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

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


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

MAIL="`whereis mail | awk '{print $2}'`"
WHOAMI="`whoami`"
HOSTNAME="`hostname`"
EMAIL"[email protected]"
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

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

*#!/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*

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

# 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
}

एक और विकल्प - Swaks (एसएमटीपी के लिए स्विस आर्मी चाकू)।

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

अगर फ़ाइल टेक्स्ट है, तो आप इसे शरीर में सबसे आसान भेज सकते हैं:

sendmail [email protected] < message.txt

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

echo "This is the message body" | mutt -a "/path/to/file.to.attach" -s "subject of message" -- [email protected]

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

echo "Start of Body" && uuencode log.cfg readme.txt | mail -s "subject" "[email protected]" 

और यह मेरे लिए अच्छा काम किया ....


मैं आमतौर पर केवल आरएचईएल पर मेल कमांड का उपयोग करता हूं। मैंने मेलक्स की कोशिश की है और यह बहुत ही कुशल है।

mailx -s "Sending Files" -a First_LocalConfig.conf -a
Second_LocalConfig.conf [email protected]

This is the content of my msg.

.

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

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" [email protected]

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


 echo 'These are contents of my mail' | mailx -s 'This is my email subject' -a /path/to/attachment_file.log [email protected]

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


स्रोत मशीन से

mysqldump --defaults-extra-file=sql.cnf database | gzip | base64 | mail [email protected]

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

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

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

 echo "Message Body Here" | mailx -s "Subject Here" -a file_name [email protected]

sendmail का उपयोग कर

#!/bin/ksh

fileToAttach=data.txt

`(echo "To: [email protected]"
  echo "Cc: [email protected]"
  echo "From: Application"
  echo "Subject: your subject"
  echo  your body
  uuencode $fileToAttach $fileToAttach
  )| eval /usr/sbin/sendmail -t `;

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

mail -s "Backup" -a mysqldbbackup.sql [email protected] < message.txt

या यह भी:

cat message.txt | mail -s "Backup" -a mysqldbbackup.sql [email protected] 

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

sendemail -f [email protected] -t [email protected] -m "Here are your files!" -a file1.jpg file2.zip

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


मेटामेल में उपकरण मेटासेंड है

metasend -f mysqlbackup.sql.gz -t [email protected] -s Backup -m application/x-gzip -b




command-line