[ rapidlord @ 30.08.2007. 13:41 ] @
Moze li mala pomoc,
nemam neko iskustvo u linux/bash programiranje, mada mi nije strano.

Znaci scenarij je ovakav:

Skripta proverava mail-box
Kada naidje novi mail, napravi HTTP Request na nekoj adresi, npr:
www.mojsajt.com?post_mail?subject=this_subject&body=this_body...


ne treba mi ceo source code ili tako nesto ,
samo osnovne smernice odakle da pocnem,


p.s. Ah da mail bi bio malo modifikovan pre posta, ubacivanjem nekih tagova u body.

[ Tyler Durden @ 30.08.2007. 14:09 ] @
Ja nisam baš u potpunosti razumio šta želiš da se uradi.
Ajmo ovako najprije, zašto mora baš BASH?
[ rapidlord @ 30.08.2007. 14:16 ] @
Pa nemora bash bash, moze i nesto drugo.
To i jeste u osnovi glavno pitanje , kako i sa cim? perl? bash? neka kombinacija?

Znaci kad stigne mail pravi se http request na neku stranicu. i postuje se taj mail sa parametrima subject i body?
[ rapidlord @ 30.08.2007. 14:25 ] @
Radi se o ovome, pa ako se nekom svidja ideja moze da se prikljuci razvoju.

Imam mali eksperiment da sve vezano za jedan projekat stavljam u WIKI,
MediaWiki da budem tacniji, projektnu dokumentaciju, source code,
neke primere, ma sve sto ima veze sa tim projektom.

Deluje kao dobra ideja jer brzo moze da se pristupi stranicama i ubaci materijal ,
da se brzo izmene stranica, imas history izmena, atach fajlove. i super "search".

Jos samo fali da mejlovi koji su u vezi sa tim projektom direktno idu u WIKI,
sa tagom [category:emails].

Tako bi imali sve podatke vezane za projekat na jednom mestu.



[ Jbyn4e @ 30.08.2007. 15:13 ] @
Treba ti najverovatnije procmail da pozove skript koji ce to da uradi. Vise o procmail filtriranju - man procmail, man procmailrc ili google ili npr tutorijal:
http://userpages.umbc.edu/~ian/procmail.html
[ rapidlord @ 30.08.2007. 17:51 ] @
ok hvala, znaci

.forward -> .procmail -> script.pl


Samo mi nije jasno, dali se .procmail poziva automatski kad stigne bilo koji mail za usera,
ili se .foward poziva automatski , pa on poziva .procmail,

i jeli bitno da se .procmail nalazi u "mail" folderu.




Nesto mi ne radi kako treba:

.forward koji se nalazi u /home/testuser/ sadrzaj:

"|IFS=' ';exec /usr/local/bin/procmail USER=testuser"


zatim .procmail koji se nalazi u /home/testuser/mail/ sadrzaj:

:0
* ^Subject:.*
| formail -s script.pl notice;


i script.pl se takodje nalazi kod procmail-a u folderu "mail"
njen sadraj za sad nije bitan , stavio sam recimo da ispise neki text u obican text file.
(i ispisuje to kad se rucno pokrene ./script.pl)


Cela stvar ne radi uopste, script.pl se uopste ne izvrsava?? moze mala pomoc.
[ Jbyn4e @ 30.08.2007. 20:18 ] @
Na jednoj test masini stoji mi (menjam svoj user sa testuser):
.forward:
Code:

"|IFS=' ' && exec /usr/bin/procmail -f- || exit 75 #testuser"

Dalje, deo .procmailrc-a:
Code:

:0
* .*testuser*
        {
....
       :0 bB E c
        *  ^Subject.*trtmrt
                * .*
                | ./script trtmrt  2 6
                }
        :0 H B E
        *  ^Subject.*veliko
                {
                :0 H Bb c
                * .*KKK
                | ./scr veliko 29 1 | ./scr2
                }  
       .....
}

Ne pitaj me sta znace ove oznake, pogledaj man procmail-a (davno sam bas znao koja je koja, a sad kad mi treba pogledam manual L:)) Tackice (...) znaci da ima jos toga, samo sam malo skratio da bi bilo pregledno
skriptovi scr i scr2 su shell srciptovi u istom direktorijumu gde i .procmailrc (home dir usera) i tu imamo nesto ovako:
Code:

#!/bin/bash
cat - |
recode  UTF-8 |
...
sed -e "1s/$/','<html><body><p>/" |
...
sed -e :b -e '/$/N ; s/\r\n/\n/; tb' |
...
sed -e '/!@#/,$d' >> $1
...
psql -d baza -h host -U user -f ./$1


P.S. formail uopste ne koristim...

P.P.S. da li sam jos nesto podesavao za procmail ... stvarno se ne secam (fajlovi su mi iz 2005-te kad sam to radio) a ako jesam to je ovaj red kod postfix-a, u master.cf:
Code:

procmail  unix  -       n       n       -       -       pipe  flags=R user=nobody argv=/usr/bin/procmail -t -m /etc/procmailrc ${sender} ${recipient}

[ chupcko @ 30.08.2007. 22:49 ] @
Generalno u zavisnosti od mail servera mozes uvek da napravis neki alias koji prosledjuje mail kroz program, nesto tipa |/bin/trtmrt. Naravno sam program se staruje kada dodje mail, a na stdin dobices ceo mail :). mislim da je malo jednostavnije od dizanja procmail-a i ...
[ rapidlord @ 31.08.2007. 15:45 ] @
Problem je bio sto na DreamHost-u gde imam hosting, ne stavlja se .forward nego .forward.postfix

i namucio sam se i sa dozvolama za fajlove. Nije htelo da radi dok .procmail i .forward.postfix nisam stavio na chmod 644

Sada mogu da krenem da radim sa skriptom.
[ rapidlord @ 31.08.2007. 18:11 ] @
Jel moze jos jedna mala pomoc:

imam .procmail fajl:

Code:
# DH compatible .procmailrc file
# Last updated 7/25/2007
PATH=/bin:/usr/bin:/usr/local/bin
MAILDIR=$HOME/Maildir
LOGFILE=/dev/null # specify something else if you want log files generated
SHELL=/bin/sh

# Add your rules here

:0c
| $HOME/test.pl

:0c
| gzip >>$HOME/headc.gz

# Catch-all rule for all unmatched email
:0
$HOME/test


Ovaj deo se uopste ne izvrsava:
Code:

:0c
| $HOME/test.pl


Dok se ostala dva gzip >>$HOME/headc.gz i $HOME/test izvrsavaju ok.


test.pl radi ok kada se pokrene rucno, skripta jednostavno ispisuje neki text u fajl:

Code:
#!/usr/bin/perl -w


open (MYFILE, '>>data2.txt');
print MYFILE "test 1";
close (MYFILE);   


Ali skripta se ne izvrsava automatski kad stigne mail.

Stavio sam chmod 744 test.pl
[ Jbyn4e @ 31.08.2007. 18:43 ] @
Deluje kao da ne zna sta da radi sa .pl fajlom (u tom slucaju mozda mozes da mu kazes /putranja/do/perl $HOME/test.pl)
Uostalom, taj logfile sto si stavio na /dev/null - preusmeri u fajl pa vidi sta se desava.

Kako znas da se druga dva izvrsavaju ok? Si siguran?
[ rapidlord @ 01.09.2007. 13:52 ] @
LogFile:

Code:
From [email protected]  Sat Sep  1 05:45:25 2007
 Subject: wiki-test.test  88888
  Folder: /mnt/kiln/vol/boot/spunky/atlantis/MY_USER/test/msg.GdapC        876



Citat:
Kako znas da se druga dva izvrsavaju ok? Si siguran?


Kada stigne mail, vidim ga u folderu "test" (bez procmail-a se pojavljuje po default u "Maildir"), a u $HOME se pojavi headc.gz arhivirana poruka. Znaci da system prodje te dve komande.


Malo opsirniji log file, VERBOSE=on

Code:
procmail: Assigning "SHELL=/bin/sh"
procmail: Assigning "LASTFOLDER=perl /mnt/kiln/vol/boot/spunky/atlantis/rapidlord/test.pl"
procmail: Executing "perl,/mnt/kiln/vol/boot/spunky/atlantis/rapidlord/test.pl"
procmail: [14914] Sat Sep  1 06:45:24 2007
procmail: Executing " gzip >>$HOME/headc.gz"
procmail: [14914] Sat Sep  1 06:45:24 2007
procmail: Assigning "LASTFOLDER= gzip >>$HOME/headc.gz"
procmail: Assigning "LASTFOLDER=/mnt/kiln/vol/boot/spunky/atlantis/rapidlord/test/msg.-iR_"
procmail: Opening "/mnt/kiln/vol/boot/spunky/atlantis/rapidlord/test/msg.-iR_"
procmail: Acquiring kernel-lock
procmail: Notified comsat: "rapidlord@0:/mnt/kiln/vol/boot/spunky/atlantis/rapidlord/test/msg.-iR_"
From [email protected]  Sat Sep  1 06:45:23 2007
 Subject: wiki-test.test  45345345
  Folder: /mnt/kiln/vol/boot/spunky/atlantis/rapidlord/test/msg.-iR_        877


[Ovu poruku je menjao rapidlord dana 01.09.2007. u 15:48 GMT+1]
[ Jbyn4e @ 01.09.2007. 18:48 ] @
Ja testirao na galeb.etf.bg.ac.yu lepo radi tvoj skript (perl) u kombinaciji sa procmail-om, meni lepo napravio data2.txt.... tako da ...
Citat:

From [email protected] Sat Sep 1 19:41:53 2007
Subject: erw
procmail: Notified comsat: "xxxxx@:/usr/sbin/sendmail -oi [email protected]"
procmail: [14033] Sat Sep 1 19:42:49 2007
procmail: Assigning "LASTFOLDER=./test.pl"
procmail: Match on "procmail: Executing "./test.pl"
"

Da li si siguran da ti je perl tamo gde si napisao? Na galebu jeste, which perl daje tu putanju.
[ rapidlord @ 01.09.2007. 19:02 ] @
Nasao sam gresku, mada i nije greska:

Samo puna putanja to foldera za data fajl, znaci skripta se izvrsavala samo ko zna gde je kreirala data fajl:

Code:
#!/usr/bin/perl -w


open (MYFILE, '>>/home/rapidlord/data2.txt');
print MYFILE "test 1";
close (MYFILE); 


Tako da sad radi.

Sada ne znam samo kako da prihvatim sadrzaj mejla u perl skriptu, obrada i postovanje je lako,
ali gde su mi podaci? Provalicu to nekako, a ako neko ima neki tip...

Code:
!/usr/bin/perl -w

my $mail = "where is the f*** my mail content";

open (MYFILE, '>>/home/rapidlord/data2.txt');
print MYFILE "test 1";
close (MYFILE); 


Tnx, za pomoc
[ Jbyn4e @ 01.09.2007. 19:31 ] @
Hm, probaj
Code:

$x = <STDIN>;

mada ne znam perl... ovo videh na
http://www.english.uga.edu/humcomp/perl/superbasic.html
ili varijanta sa
http://alumnus.caltech.edu/~sv...odScript/perlGettingInput.html
gde pre perl skripta pokreces shell komandu cat:
Code:

cat logfile | processLogfile.pl

odnosno tebi bi trebalo jedno cat - | ./test.pl kao sto je u mom primeru gore negde...
Valjda. Probaj, ne kosta nista :)
[ rapidlord @ 01.09.2007. 21:18 ] @
:) to je to , tnx

Code:

open (MYFILE, '>>/home/rapidlord/data2.txt');

while (<STDIN>) {
        my $currLine = $_;
        print MYFILE " $currLine ";
}

close (MYFILE);


Samo to, i radi , imam ceo e-mail.

Sad "samo" da provalim postovanje na MediaWiki, post parametre za kreiranje nove stranice,
a i malo regexa da ispeglam meil kontent.
[ rapidlord @ 01.09.2007. 23:56 ] @
Evo zavrsena skripta:

Skripta nije jos 100% zavrsena ali radi, trebalo bi da se dodaju i razni parametri za vise korisnika,
vise kategorija, cfg fajl itd. Ali neki drugi put.


1. ".forward.postfix U zavisnosti od sistema ovaj fajl moze da bude drukcije (obicno je i ".forward" ), kod mene na dreamhost-u izgleda ovako:



Code:


"|/usr/bin/procmail -t"




2. ".procmailrc Ovaj fajl takodje moze malo da se razlikuje u zavisnosti od putanja na serveru:

Code:


# Empty DH compatible .procmailrc file
# Last updated 7/25/2007
VERBOSE=on
PATH=/bin:/usr/bin:/usr/local/bin;/usr/bin/perl
MAILDIR=$HOME/Maildir
LOGFILE=$HOME/log.txt # specify something else if you want log files generated
SHELL=/bin/sh

# Add your rules here

# send mail to wiki with test.pl script
:0c
| perl $HOME/test.pl




3. "test.pl" I na kraju Perl skripta:

Code:


#!/usr/bin/perl -w

use strict;
use LWP::UserAgent;
use HTTP::Request::Common qw(POST);
use HTTP::Cookies;

my $title = 'title';
my $urlBase = 'http://www.mojsajt.com/wiki/index.php';  #stavi odgovarajucu putanju
my $cookieFile = '/home/linux_user/mojsajt.com/cookies.txt';  #stavi odgovarajucu putanju
my $page = 'page';

my $ua = LWP::UserAgent->new;
$ua->cookie_jar(HTTP::Cookies->new('file' => $cookieFile));

while (<STDIN>) {
       my $currLine = $_;
       $page = $page.$currLine; 
}

$page = "$page \n [[Category:Mail Gateway]]";

$page=~m|Subject: \s*(.*?)\n|is;
  $title=$1;

my $req = HTTP::Request->new(GET
    => "$urlBase?title=$title&action=edit");

my $res = $ua->request($req);
my $content = $res->content;

my $token;
my $text;
my $time;

$content=~m|<input type='hidden' value="(.*?)" name="wpEditToken" />|i;
$token=$1;
$content=~m|<textarea.*?name="wpTextbox1".*?>(.*?)</textarea>|is;
$text=$1;
$content=~m|<input type='hidden' value="(.*?)" name="wpEdittime" />|i;
$time=$1;
            
unless ($res->is_success) {
    print STDERR "Unable to fetch wiki page '$page': $!\n";
    exit;
}
            
$req = POST "$urlBase?title=$title&action=submit",
    [ 'wpTextbox1' => $page, 'wpSummary' => '',
            'wpSection' => '', 'wpEdittime' => $time,
                    'wpMinoredit' => '1', 'wpSave' => 'Save page',
                            wpEditToken => $token ];
                                        $res = $ua->request($req);
                                        
unless ($res->is_success) {
    print STDERR "Error: Cant add new page!\n";
        exit;
        }





Hvala Jbyn4e na pomoci.



Ah da, zasto da ne , ako neko zeli da vidi kako ovo radi, neka posalje mejl na:

[email protected]

I vidi rezultat na:

http://www.pdadevelop.com/wiki/

Ili blize na:

http://www.pdadevelop.com/wiki...y:Mail_Gateway&action=edit

[Ovu poruku je menjao rapidlord dana 02.09.2007. u 01:19 GMT+1]