Forum » Operacijski sistemi » Pošiljanje datotek na mail - skripta
Pošiljanje datotek na mail - skripta
purki ::
Rad bi poslal vse datoteke - ena po ena - na moj mail. Konkretno so to slike JPG.
Kar bi rad je pomoč pri izdelabi bash skripte.
Datoteko sedaj pošiljam na sledeč način
#!/bin/sh
# naredimo MIMO fajl z priponko
DANES=`date +%d.%m.%y`
cd /tmp
rm out.mime
/opt/bin/mpack -s ${DANES} -o /tmp/out.mime /tmp/motion.jpg
# posljemo
/opt/sbin/sendmail krnekam@gmail.com -f odmene@gmail.com < /tmp/out.mime
To skripto bi rad modificiral na sledeč način
1) rm out.mime se pobriše samo če obstaja
2) mpack in sendmail naj bi delala v zanki in sicer naj bi obdelala vse jpg datoteke v /tmp in ne samo motion.jpg
3) rezultati mpack-a in sendmail-a naj se vpisujejo v log file
...
Kar bi rad je pomoč pri izdelabi bash skripte.
Datoteko sedaj pošiljam na sledeč način
#!/bin/sh
# naredimo MIMO fajl z priponko
DANES=`date +%d.%m.%y`
cd /tmp
rm out.mime
/opt/bin/mpack -s ${DANES} -o /tmp/out.mime /tmp/motion.jpg
# posljemo
/opt/sbin/sendmail krnekam@gmail.com -f odmene@gmail.com < /tmp/out.mime
To skripto bi rad modificiral na sledeč način
1) rm out.mime se pobriše samo če obstaja
2) mpack in sendmail naj bi delala v zanki in sicer naj bi obdelala vse jpg datoteke v /tmp in ne samo motion.jpg
3) rezultati mpack-a in sendmail-a naj se vpisujejo v log file
...
kekz ::
1) rm out.mime se pobriše samo če obstaja
out.mime se najbrž itak pobriše samo, če obstaja? Če ne obstaja, se najbrž ne more pobrisati, ali kako ??
Neko komando nad datotekami v zanki je najbolj simpl narediti s find:
find /tmp -name "*.jpg" -maxdepth 1 -exec [tvoja komanda nad datoteko {}] \;
find {} nadomesti z imenom datoteke, katero najde v posamezni iteraciji.
purki ::
To itak samo ker mi potem stalno teži v logih "File not found"
Torej tako misliš
find /tmp -name "*.jpg" -maxdepth 1 -exec [ /opt/bin/mpack -s ${DANES} -o /tmp/out.mime /tmp/find{} && /opt/sbin/sendmail krnekam@gmail.com -f odmene@gmail.com < /tmp/out.mime];
Torej tako misliš
find /tmp -name "*.jpg" -maxdepth 1 -exec [ /opt/bin/mpack -s ${DANES} -o /tmp/out.mime /tmp/find{} && /opt/sbin/sendmail krnekam@gmail.com -f odmene@gmail.com < /tmp/out.mime];
Zgodovina sprememb…
- spremenilo: purki ()
kekz ::
Aha, potem imaš več možnosti (kot ponavadi):
1. rm -f fajl
2. rm fajl 2> /dev/null
3. if [ -f fajl ]; then rm fajl; fi
...
1. rm -f fajl
2. rm fajl 2> /dev/null
3. if [ -f fajl ]; then rm fajl; fi
...
kekz ::
Tisti [ ] odstrani. Komando daš (če je komplicirana) samo v narekovaje ali celo brez (če je enostavnejša, potem mora biti na koncu \;).
Jaz sem napisal [...] kot zadevo, ki jo moraš zamenjati s svojo komando (vključno z oklepaji):
find /tmp -name "*.jpg" -maxdepth 1 -exec "/opt/bin/mpack -s ${DANES} -o /tmp/out.mime {} && /opt/sbin/sendmail krnekam@gmail.com -f odmene@gmail.com < /tmp/out.mime" ;
find najbrž ne bo prebavil tako kompliciranega konstrukta. S tem ima ponavadi nekaj težav.
Ali boš moral poenostaviti komando, ali pa jo spraviti v proceduro ali drugo skripto, in potem samo tisto kličeš iz find-a.
Drugi način je s for zanko - slabost je, da ti bo crknilo, če bo preveč fajlov - predolga vrastica pride
for datoteka in `ls /tmp/*.jpg`
do
tukaj_je_lahko_tudi_komplicirana_komanda ${datoteka}
done
Tretji način je z while zanko:
ls /tmp/*.jpg | while read datoteka
do
tukaj_je_lahko_tudi_komplicirana_komanda ${datoteka}
done
Jaz sem napisal [...] kot zadevo, ki jo moraš zamenjati s svojo komando (vključno z oklepaji):
find /tmp -name "*.jpg" -maxdepth 1 -exec "/opt/bin/mpack -s ${DANES} -o /tmp/out.mime {} && /opt/sbin/sendmail krnekam@gmail.com -f odmene@gmail.com < /tmp/out.mime" ;
find najbrž ne bo prebavil tako kompliciranega konstrukta. S tem ima ponavadi nekaj težav.
Ali boš moral poenostaviti komando, ali pa jo spraviti v proceduro ali drugo skripto, in potem samo tisto kličeš iz find-a.
Drugi način je s for zanko - slabost je, da ti bo crknilo, če bo preveč fajlov - predolga vrastica pride
for datoteka in `ls /tmp/*.jpg`
do
tukaj_je_lahko_tudi_komplicirana_komanda ${datoteka}
done
Tretji način je z while zanko:
ls /tmp/*.jpg | while read datoteka
do
tukaj_je_lahko_tudi_komplicirana_komanda ${datoteka}
done
Zgodovina sprememb…
- spremenilo: kekz ()
kekz ::
Sicer pa jaz pošiljam datoteke (priponke) z nail, oz. zdaj se temu reče mailx.
mailx -s "Subject" -a fajl prejemnik@nekje
mailx -s "Subject" -a fajl prejemnik@nekje
purki ::
@kekz: Probal sem NAIL
A kot kaže moram nekje dobiti nek certifikat
[admin@(none) /opt]$ nail -s "subjekt" -a /tmp/harddisk/kamera/motion.jpg -v mojmail@gmail.com < /tmp/harddisk/out.mime
Resolving host smtp.gmail.com . . . done.
Connecting to 64.233.183.109 . . . connected.
220 mx.google.com ESMTP y24sm25503441nfb
>>> EHLO (none)
250-mx.google.com at your service, [193.77.251.151]
250-SIZE 20971520
250-8BITMIME
250-STARTTLS
250 ENHANCEDSTATUSCODES
>>> STARTTLS
220 2.0.0 Ready to start TLS
Error with certificate at depth: 0
issuer = /C=ZA/ST=Western Cape/L=Cape Town/O=Thawte Consulting cc/OU=Certificat
ion Services Division/CN=Thawte Premium Server CA/emailAddress=premium-server@th
awte.com
subject = /C=US/ST=California/L=Mountain View/O=Google Inc/CN=smtp.gmail.com
err 20: unable to get local issuer certificate
Continue (y/n)? could not initiate SSL/TLS connection: error:14090086:SSL routin
es:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
"/usr/local/root/dead.letter" 5444/395543
. . . message not sent.
[admin@(none) /opt]$
[admin@(none) /opt]$
A kot kaže moram nekje dobiti nek certifikat
[admin@(none) /opt]$ nail -s "subjekt" -a /tmp/harddisk/kamera/motion.jpg -v mojmail@gmail.com < /tmp/harddisk/out.mime
Resolving host smtp.gmail.com . . . done.
Connecting to 64.233.183.109 . . . connected.
220 mx.google.com ESMTP y24sm25503441nfb
>>> EHLO (none)
250-mx.google.com at your service, [193.77.251.151]
250-SIZE 20971520
250-8BITMIME
250-STARTTLS
250 ENHANCEDSTATUSCODES
>>> STARTTLS
220 2.0.0 Ready to start TLS
Error with certificate at depth: 0
issuer = /C=ZA/ST=Western Cape/L=Cape Town/O=Thawte Consulting cc/OU=Certificat
ion Services Division/CN=Thawte Premium Server CA/emailAddress=premium-server@th
awte.com
subject = /C=US/ST=California/L=Mountain View/O=Google Inc/CN=smtp.gmail.com
err 20: unable to get local issuer certificate
Continue (y/n)? could not initiate SSL/TLS connection: error:14090086:SSL routin
es:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
"/usr/local/root/dead.letter" 5444/395543
. . . message not sent.
[admin@(none) /opt]$
[admin@(none) /opt]$
kekz ::
Očitno tvoj smtp server zahteva tls sejo.
Če imaš možnost, uporabi drug ali svoj smtp server.
Drugače si boš moral skonfigurirati tls za smtp. Pri tem res rabiš certifikat, če server zahteva klientovo avtentikacijo.
Tega jaz še nisem počel.
Če imaš možnost, uporabi drug ali svoj smtp server.
Drugače si boš moral skonfigurirati tls za smtp. Pri tem res rabiš certifikat, če server zahteva klientovo avtentikacijo.
Tega jaz še nisem počel.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | LinkedIn spam?Oddelek: Loža | 2713 (2145) | kunigunda |
» | Pomoč pri izdelavi Python skripte (strani: 1 2 )Oddelek: Programiranje | 5783 (4429) | BigWhale |
» | [Ubuntu server] mail poslan iz serverja zazna kot vsiljeno pošto (strani: 1 2 )Oddelek: Omrežja in internet | 9085 (8055) | shorvat |
» | Linux sendmail - Problem !!!??Oddelek: Omrežja in internet | 1949 (1710) | n0name |
» | [UNIX] arg list too longOddelek: Programiranje | 1932 (1187) | bijonda |