Nowe posty

Autor Wątek: Skrypt do wysylania wiadomośći z załącznikami.  (Przeczytany 4707 razy)

lunixx

  • Gość
Skrypt do wysylania wiadomośći z załącznikami.
« dnia: 2014-11-24, 09:59:29 »
Witam serdecznie!

Chciałbym napisać skrypt pod linuksa, który w czasie rzeczywistym sprawdza czy w katalogu znajduje się jakiś plik, jeśli tak jest to odczytuje jego nazwę(nazwa to bedzie adres email) i wysyła go jako załącznik na właśnie ten adres.

Skrypt musiałby działać w tle, klienta poczty mam skonfigurowanego.

Teraz tak, doświadczenie z linuksem mam ok. rok czasu.

Wiem, że da się to napisać w c\\c++, ale czy jest coś pod linuksa, jakas wbudowana aplikacja, która może to umożliwić sprawdzając dane katalog non stop?

Z góry dziękuję za odpowiedzi i pozdrawiam.

płona

  • Gość
Skrypt do wysylania wiadomośći z załącznikami.
« Odpowiedź #1 dnia: 2014-11-24, 10:20:01 »
pakiet inotify-tools (dokładnie: inotifywait z tego pakietu) służy do monitorowania katalogu w czasie rzeczywistym.
Tutaj:
http://quark.humbug.org.au/publications/perl/perlsmtpintro.html
Masz opisane, jak wysyłać maila via SMTP
Tutaj:
http://www.perlmonks.org/?node_id=19430
Masz opisane, jak wysłać maila z załącznikiem

Włączenie skryptu w tle najłatwiej zrobić w /etc/rc.local

Trzeba to tylko posklejać do kupy.
Gotowca na wysyłanie maila via SMTP z załącznikiem mam, mogę podesłać, ale jest do szczególnego zastosowania - myślę, że sam zrobisz lepiej "from scratch"

No i pisz zawsze, jakiej dystrybucji używasz ;-)

lunixx

  • Gość
Skrypt do wysylania wiadomośći z załącznikami.
« Odpowiedź #2 dnia: 2014-11-24, 14:09:16 »
No więc tak napisałem coś takiego:

#!/bin/sh

while inotifywait -e modify /home/test_email/test;
do

mail -s "SKAN" poczta@email.pl -aFrom:poczta1@email.pl;
done;


jak teraz uruchomić ten plik na stałe, aby ten warunek działał zawsze w tle?

Mam kolejny problem przy listowaniu katalogu, pliki w tym folderze są zapisywane w rozszerzeniu .pdf a więc z listowania muszę usunąć to rozszerzenie, aby wiadomość była wysłana na prawidłowy adres email.

Wiem, że istnieje coś takiego jak basename tylko nie wiem jak to zitegrowac z ls.

Dystrybucja ubuntu.

płona

  • Gość
Skrypt do wysylania wiadomośći z załącznikami.
« Odpowiedź #3 dnia: 2014-11-26, 00:33:58 »
dopisz opcję -d (--deamon) do inotifywait, wtedy pętla nie będzie potrzebna.

Uruchomienie w tle - najlepiej stwórz plik wykonywalny, np. w /usr/local/bin i wstaw go do /etc/rc.local, czyli tam musi być wpis:
/usr/local/bin/twoj_skrypt
oczywiście przed linią
exit 0
twoj_skrypt będzie wykonywany z uprawnieniami root-a. Można to obejść (jeśli trzeba) via su, wtedy wpis w /etc/rc.local będzie wyglądał tak:
su nazwa_uzytkownika -c /usr/local/bin/twoj_skrypt
ale środowisko użytkownika nie będzie odtworzone - trzeba je "ręcznie" ustawić w skrypcie.

wysyłanie pliku jako załącznika maila chyba nie jest tak proste, jak napisałeś, po to podałem ci dwa linki do skryptów perla. Rozumiem, że chcesz wysłać te pliki "gdzieś na zewnątrz" - serwerów SMTP typu "open relay" już nie ma - przed wysłaniem poczty musisz się do serwera SMTP zalogować.

basename i dirname nie działają tak, jak myślisz, np.:
PLIK=`basename /usr/local/bin/twoj_skrypt`
DIR=`dirname /usr/local/bin/twoj_skrypt`
w zamiennej PLIK masz twoj_skrypt
w zmiennej DIR masz /usr/local/bin
odwrócony cudzysłów wpisuje wynik komendy do zmiennej. Ważne:
nie #!/bin/sh tylko #!/bin/bash - w dystrybucjach opartych na debianie domyślnym shell-em jest dash, który działa trochę inaczej i jest uboższy (chociaż szybszy) od bash-a.

do usunięcia rozszerzenia z nazwy pliku użyłbym kombinacji basename (wycięcie nazwy pliku) + expr index $PLIK . + expr substr (też działa w odwóconym cudzysłowie), por. man expr i trochę ćwiczeń.

szogu

  • Gość
Skrypt do wysylania wiadomośći z załącznikami.
« Odpowiedź #4 dnia: 2015-01-27, 13:54:47 »
@lunixx: udało Ci się wykonać ten skrypt? Działa?

@płona: "do usunięcia rozszerzenia z nazwy pliku użyłbym kombinacji basename...".

Nie lepiej:
echo nazwa_pliku.pdf | awk -F"." '{ print $1 }'
?

Wydaje mi się, ze szybciej i prościej.