13. 4. 1999 | ![]() ![]() ![]() ![]() ![]() |
Prßv∞ dnes, inspirovßni stßle se opakujφcφmi dotazy na totΘ╛ v linuxovΘ konferenci, jsme se rozhodli vytvo°it oblast Praxe, kterß bude obsahovat hlavn∞ r∙znΘ tipy, rady a odpov∞di na Φasto kladenΘ dotazy. Dnes se podφvßme na neinteraktivnφ odesφlßnφ email∙ s p°φlohou ¡ nap°φklad ze skript∙ apod.
Pokud pot°ebujeme odeslat soubor emailem, mßme v zßsad∞ n∞kolik mo╛nostφ. Tou nejjednodu╣╣φ a zßrove≥ nejmΘn∞ pou╛itelnou je pouhΘ vlo╛enφ obsahu souboru do t∞la zprßvy. Tuto metodu lze ov╣em ·sp∞╣n∞ aplikovat pouze na textovΘ soubory a to je╣t∞ pokud mo╛no 7bitovΘ. Pokud se pro nφ p°esto rozhodnete, staΦφ pou╛φt program mail, kter² se vyskytuje tΘm∞° na v╣ech un*xech:
mail -s "Predmet zpravy" adresat@nekde.cz < /nejaky/soubor
Tato metoda v╣ak nemusφ Φasto vyhovovat. Nap°φklad pro binßrnφ 8bitovß data, jako jsou komprimovanΘ soubory a podobn∞, je zcela nepou╛itelnß. V takov²ch p°φpadech p°ib²vß nutnost soubor konvertovat do n∞kterΘho 7bitovΘho k≤dovßnφ (nap°φklad base64 nebo quoted-printable). To lze (vΦetn∞ nßslednΘho odeslßnφ provΘst) pom∞rn∞ komfortn∞ pomocφ programu metasend, kter² je souΦßstφ balφku metamail (obsa╛en v mnoha distribucφch, zdrojovΘ k≤dy jsou k nalezenφ t°eba zde). Odeslßnφ dvou soubor∙ pomocφ metasendu by vypadalo asi takto:
metasend -b -s "Predmet zpravy" -t adresar@nekde.cz -f telo_zpravy.txt -m "text/plain" -e 7bit -n -f soubor1.gz -m "application/x-gzip" -e base64 -n -f soubor2.gz -m "application/x-gzip" -e base64
V╣imn∞me si, ╛e v podstat∞ je t°eba odeslat soubory t°i, pokud mß mφt zprßva i p°φmo ΦitelnΘ textovΘ t∞lo. To se t°eba °e╣it prßv∞ p°ilo╛enφm t°etφho souboru telo_zpravy.txt. Je vhodnΘ jej pou╛φt jako prvnφ. U ka╛dΘho souboru je pak nutnΘ definovat MIME typ (pokud si nejste jisti a nenφ nutnΘ u adresßta p°φmo vyu╛φt podpory n∞jakΘ aplikace, m∙╛e to b²t application/octet-stream) a k≤dovßnφ, kterΘ mß b²t pou╛ito pro p°evod souboru do 7 bit∙. V ·vahu p°ipadajφ ji╛ zmi≥ovanΘ base64, kterΘ je efektivn∞j╣φ, ale asi o malinko mΘn∞ roz╣φ°enΘ (nicmΘn∞ dnes je u╛ tΘm∞° bez problΘm∙ ΦitelnΘ tak°ka v╣ude) a quoted¡printable, jen╛ by m∞lo b²t roz╣φ°en∞j╣φ ne╛ base64, ale je mΘn∞ efektivnφ ¡ v²sledn² email je pak v∞t╣φ.
Ostatnφ parametry jsou celkem srozumitelnΘ: ¡t urΦuje adresßta, -s p°edm∞t a ¡b pak programu °φkß, ╛e pracuje v tzv. batch (dßvkovΘm) re╛imu a tudφ╛ nemß oΦekßvat ╛ßdn² vstup od u╛ivatele. Parametrem ¡f volφme jednotlivΘ soubory k p°ilo╛enφ a ¡n je t°eba pou╛φt p°ed ka╛d²m jednotliv²m souborem, aby metasend pochopil, ╛e soubor∙ bude vφce.
S metasendem se pracuje docela p∞kn∞, ale n∞kdy p°esto nenφ ani tato mo╛nost k dispozici. Pak nezbyde, ne╛ dßt MIME mail dohromady ruΦn∞. Nenφ to tak zlΘ, staΦφ jenom v∞d∞t, co a kam poslat :)
K odeslßnφ emailu s p°φlohami postaΦφ nßsledujφcφ skript, kter² je urΦen pro Bash, pro jinΘ shelly jej bude nutnΘ z°ejm∞ minimßln∞ upravit:
#!/bin/sh IFS=" " echo "From: ja@nekde" echo "MIME-Version: 1.0" echo "To: $1" echo "Subject: predmet zpravy" echo "Content-type: multipart/mixed; boundary="separator"" echo echo "Toto je vicedilna MIME zprava. Pokud vidite tenhle blabol, vas mailer neumi MIME :)" echo echo "--separator" echo "Content-type: text/plain" echo "Content-Description: Textova cast" echo "Content-Transfer-Encoding: 7bit" echo cat $2 echo echo cnt=0 for file; do fname=`basename $file` if [ $cnt -lt 2 ]; then cnt=$[ $cnt + 1 ] else echo "--separator" echo "Content-type: application/octet-stream; name="$fname"" echo "Content-Description: $file" echo "Content-Transfer-Encoding: base64" echo lcnt=0 uuencode -m $file - | while read line; do if [ $lcnt -gt 0 ] && [ "====" != "$line" ]; then echo $line else lcnt=$[ $lcnt + 1 ] fi done echo fi done echo "--separator--"
Autor: Michal Krause (jinΘ Φlßnky tohoto autora)
Sekce: Praxe
11. 10. 2002 14:48:21 - v scripte mozno staci (B)
mutt root -s "skuska" -a ./subor -x < "."
16. 4. 1999 12:17:09 - presne toto jsem vcera resil a... (Headman)
presne toto jsem vcera resil a na program
metasend jsem nenarazil, ale nasel jsem balik juju,
ktery obsahuje balik juen. (Umi asi totez co metasend)
wget http://pes.eunet.cz/iso-8859-2/index.htm -O index.html
juen -Q -A -m email@adress.cz -s 'Headmanuv pes postou' -F '' index.html
A funguje to dokonce tak, ze to mailvace zobrazi jako html
26. 3. 2000 13:27:21 - Re: presne toto jsem vcera resil a... (M.Oravec)
Nebolo by mozne napisat podobny clanocek o zasielani sprav serveru na mobil vo forme SMS?
Bolo by to zaujimave.
![]() ![]() ![]() ![]() ![]() |