linux - with - लिनक्स ऑपरेटिंग सिस्टम की विशेषता




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

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

(
  /usr/bin/uuencode attachfile.txt myattachedfilename.txt; 
  /usr/bin/echo "Body of text"
) | mailx -s 'Subject' [email protected]

नीचे की तरह एक ही आदेश है, बिना न्यूलाइन के

( /usr/bin/uuencode /home/el/attachfile.txt myattachedfilename.txt; /usr/bin/echo "Body of text" ) | mailx -s 'Subject' [email protected]

सुनिश्चित करें कि आपके पास इस सामग्री के साथ परिभाषित फ़ाइल /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>

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

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

सुनिश्चित करें कि आपके पास ksh इंस्टॉल है: yum info ksh

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

सुनिश्चित करें कि आपने यूनकोड स्थापित और उपलब्ध है: https://unix.stackexchange.com/questions/16277/how-do-i-get-uuencode-to-work

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

test.sh में निम्न कोड test.sh :

#!/usr/bin/ksh
export MAILFROM="[email protected]"
export MAILTO="[email protected]"
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 pdf-test.pdf कहा जाता है

/home/el/email_body.htm नामक फ़ाइल बनाएं और इस पंक्ति को इसमें रखें:

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

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

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

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

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

$ cat mysqldbbackup.sql | mailx [email protected]

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

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


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

sendmail [email protected] < message.txt

इस प्रकार मैं 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

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

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


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

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

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


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

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

मैं 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/


मैं mpack का उपयोग करें।

mpack -s subject file [email protected]

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

mpack -s subject /dev/stdin [email protected] < file

मैंने सोलार्स पर 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
}

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

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

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


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

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

यहां 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

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

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


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

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

या यह भी:

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

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


mutt बारे में एक और बात: डिफ़ॉल्ट रूप से यह "प्रेषक:" फ़ील्ड में आपके पते और नाम का उपयोग करती है। यदि आपको इसकी आवश्यकता नहीं है, तो आप वैकल्पिक म्यूटट्रैक फ़ाइल बना सकते हैं जिसमें एक स्ट्रिंग है: = "मेरा मेल डिमन" से सेट करें

-F कमांड लाइन विकल्प के साथ इस फ़ाइल का प्रयोग करें।


स्रोत मशीन से

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

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




command-line