Avatar billede htm Nybegynder
21. maj 2004 - 13:03 Der er 5 kommentarer og
1 løsning

Behandle mail af script

Tekst fra lukket spørgsmål.

Hej

Jeg kunne godt tænke mig at jeg kunne sende en mail til en mailadresse, og så kunne jeg analysere den via et script. Dette kunne eks. ske at indholdet af mails sendt til en given adresse bliver skrevet i en logfil.

Men hvordan?

Jeg har en exchange 2003 server der behandler mails til denne adresse normalt.

Jeg har mulighed for Windows 2003 med asp og php eller linux med php.

Hvad skal der til får at jeg kan få indholdet af den mails skrevet til en logfil?

Jeg skriver i denne kategori, da jeg ikke har nogen anelse om hvad der skal til for at jeg kan fange den mail og skrive den til en logfil. Alle muligheder der kan køre på de OS er velkomne.
Avatar billede htm Nybegynder
21. maj 2004 - 13:06 #1
Kommentar: sandbox
16/04-2004 15:03:59    På linux kan du sætte procmail til at køre en ekstern kommando, med den indkommende mail som input. Den eksterne kommando kan være et shellscript (eller et php- eller perl-script for den sags skyld.)

Der kan også laves diverse filtre, så bestemte headers kan resultere i kørsel af forskellige scripts.
Kommentar: htm
16/04-2004 15:48:28    Hvordan vill det kunne sættes op?

Der er jo ikke nogen mailserver på linuxen - men det er muligt at hente mailen via exchange eller pop3. Har du et eks. med procmail, der tager en mail og skriver indholdet til en fil, eller giver indholdet som et argument til et php script eller lign.
Kommentar: sandbox
16/04-2004 16:14:48    OK, du kan eventuelt bruge fetchmail til at hente posten fra Windows-maskinen.

Her er en stump fra min ~/.procmailrc (dvs. procmails indstillingsfil.)

:0fw
| spamassassin -P

Nu er spamassassin godt nok et perl-script, men det er ikke så vigtigt. Bare første linie i scriptet ser således ud:

#!/usr/bin/php

Så vil php blive brugt til at køre det. Jeg ved ikke lige, hvordan man behandler input i php.

manualerne for procmail giver en hel masse eksempler, men nederst under NOTES er der en "kom hurtigt igang" beskrivelse.

Jeg er væk fra nu og hele weekenden, så du skal ikke regne med hurtige svar fr mig de næste par dage.
Kommentar: htm
16/04-2004 16:36:36    Helt i orden :o) Får hellere ikke tid til noget test før mandag ... :o)

Hvordan ville det eks. se ud i et perl script?

Henter procmail fra en pop3 konto eller lign ?
Kommentar: sandbox
18/04-2004 22:41:06    Nej, men det gør fetchmail, og den kan derefter aflevere posten til procmail.

Hvis du installerer fetchmail og procmail (de findes normalt som færdiglavede pakker til de fleste Linux-distributioner.) så skal du have en ~/.fetchmailrc der ser ud i stil med:

poll "navn på POP3 server" protocol POP3
  user "brugernavn" there has password "kodeord"
  is "linux-brugernavn" here
  and wants mda "/usr/bin/procmail"

I et perl-script ser første linie således ud:

#!/usr/bin/perl

Resten af scriptet kommer så an på, hvad du vil gøre.
Kommentar: htm
20/04-2004 19:12:52    Må indrømme at jeg ikke forstår ret meget af hvad du skriver lige nu, men det kan være det kommer. Jeg vil kigge lidt i dokumentationen for fetchmail og procmail.

Har ikke lige haft tid til at kigge på det endnu, desværre.

Men læg bare et svar, så finder jeg ud af om jeg kan bruge det.

Men hvis du lige kan bikse det sammen, må du gerne give et eks. hvordan et perlscript kan gemme indholdet (body) af en mail i en tekstfil.
Svar: sandbox
21/04-2004 00:43:40    Jeg har lige leget lidt med min egen procmail, og hvis du bare vil have body fra al indkommende post gemt i en fil, behøver du faktisk ikke mere end følgende i din .procmailrc:

:0:
| sed -e '1,/^$/ d' >>/home/brugernavn/bodyfil

For en sikkerheds skyld er det nok en ide først at afprøve det med:

:0c:
| sed -e '1,/^$/ d' >>/home/brugernavn/bodyfil

Så bliver mailen samtidig gemt i brugerens normale postbakke (Normalt /var/spool/mail/brugernavn)

Det er ikke engang nødvendigt med et selvstændigt script til at gøre det.
Kommentar: htm
21/04-2004 21:39:51    Hmm har lige prøvet at installere fetchmail  - men kan ikke få den installeret.

Bruger denne : http://catb.org/~esr/fetchmail/fetchmail-6.2.5-1.i386.rpm

Mine fejl:
error: failed dependencies:
        libcrypto.so.2  is needed by fetchmail-6.2.0-1
        libhesiod.so.0  is needed by fetchmail-6.2.0-1
        libssl.so.2  is needed by fetchmail-6.2.0-1


Umiddelbart kan jeg se at det er openssl der mangler, men denne har jeg installeret i version 0.9.7c

Hvad er det galt?
Kommentar: sandbox
21/04-2004 22:02:44    Findes den ikke som pakke i din distributions normale pakkesystem?
Kommentar: htm
21/04-2004 22:13:31    Ikke umiddelbatt - har Trustix - brugte så swup (lidt ala apt-get) til at kigge - her kunne jeg kun finde procmmail ikke fetchmail. Trustix er bygget på redhat. så det er muligt der er en pakke til den, det ved jeg faktisk ikke.
Kommentar: sandbox
21/04-2004 22:52:01    Prøv med denne istedet: http://tsldev.trustix.org/cloud/contrib/rpms/fetchmail-6.2.5-3bg.i586.rpm
Kommentar: htm
21/04-2004 22:54:36    OK mange tak - så ville den installere sig :o)

Jeg vil kigge på det i morgen, men forløbig tak.
Kommentar: htm
20/05-2004 22:45:47    ok der gik lidt mere en til dagen efter, håber det går :o)

Jeg kan ikke helt hitte ud af hvad der skal til?

Skal jeg oprette den fil ~/.fetchmailrc ? og hvad skal indholdet være af den?
Og hvad med procmail hvordan skal jeg konfigurer den?

Og hvordan starter jeg det hele så det kører? Skal det køre via deamon eller cronjob?

Ville være godt hvis du kunne lave en kort beskrivelse af de steps jeg skal igennem!
Kommentar: sandbox
21/05-2004 00:18:42    Din .fetchmailrc (som skal ligge i hjemmemappen for den bruger, der kører fetchmail) skal se således ud:

poll "navn på POP3 server" protocol POP3
  user "brugernavn" there has password "kodeord"
  is "linux-brugernavn" here
  and wants mda "/usr/bin/procmail"

De eneste steder, du skal rette, er "navn på POP3 server", "brugernavn" og "kodeord", som er oplysningerne om den server, du henter posten fra, og "linux-brugernavn", som er det brugernavn på Linixmaskinen, som skal have posten. Derudover skal du rette "/usr/bin/procmail", hvis din procmail ligger et andet sted, men det gør den nok ikke.

Du skal lige være opmærksom på rettighederne. Filen skal have rw for ejeren og ikke andre.

Derefter skulle du bruge en ~/.procmailrc

Det burde være nok med en minimal fil, der ser således ud:

:0:
| sed -e '1,/^$/ d' >>/home/brugernavn/bodyfil

Denne fil skal have rettighederne rw for ejeren og (vistnok) r for andre. Ret til, så den gemmer i den fil, du ønsker. Bemærk, at mappen, hvori filen, der skal skrives til, ligger, skal måske have rwx-rettigheder for alle.

Så er det vist en god ide at teste, før du sætter den til at køre fuldautomatisk. Når du tester, så brug kommandoen:
fetchmail --keep

Den henter posten, men sletter den ikke fra serveren. (Glimrende til testformål.) Hvis det hele virker, og den gemte body fra de indkomne mails i filen, som den skulle, kan du gå videre.

Til sidst skal du have sat automatik på.

Jeg vil anbefale at køre fetchmail som et cronjob. Jeg kører den fra min normale brugers crontab, men du kan også bare putte den i /etc/crontab

Kommandoen skal være: fetchmail --silent
Hvis den er i en bruger-crontab, ser den således ud:
6,26,46 * * * * fetchmail -s

Og hvis den er i /etc/crontab ser den sådan ud:
6,26,46 * * * * brugernavn fetchmail --silent

Tallene er minuttal for hvornår, der skal hentes post.

Denne gang er kommandoen uden --keep, men til gengæld har jeg sat --silent på. Dette gør, at den ikke kommer med en hel masse beskeder, når der ikke er post, men kun hvis der sker fejl.
Kommentar: htm
21/05-2004 11:21:55    Hmmm er godt træt af eksperten - har lige skrevet en masse og sendt, og det bliver bare ikke postet. Oplevede det også i går....

Men tak for hjælpen det virker med at gemme body.

Men den laver lidt ekstra linieskift og indsætter = i enden af linien. efter alt teksten i body kommer =09 til at stå!

Har du nogen ide til hvordan jeg får det fjernet?

mailsne er logfiler sendt fra en firewall. De bliver sendt i plain text - og kunne eks. se sådan ud:

05/21/2004 07:16:43.680 -    NetBus Attack Dropped -    Source:xxx.xxx.xxx.xx, port, WAN -    Destination:xx.xxx.xxx.xxx, port, LAN -    -
og min bodyfil ser sådan ud:
05/21/2004 07:16:43.680 -    NetBus Attack Dropped -    =
Source:xxx.xxx.xxx.xx, port, WAN -    Destination:xx.xxx.xxx.xxx, port, =
LAN -    - =09
Avatar billede htm Nybegynder
21. maj 2004 - 13:10 #2
Point ønskes givet til sandbox - ref. http://www.eksperten.dk/spm/489963
Avatar billede cdc Novice
21. maj 2004 - 13:17 #3
Disse points til sandbox er OK efter aftale med CoAdmins


/cdc - CoAdmins.
Avatar billede Slettet bruger
21. maj 2004 - 21:08 #4
De sjove =, =09 og ekstra linieskift skyldes at teksten er encoded som quoted-printable.

Hvis du har kommandoen mimencode på din maskine, burde teksten blive normal, hvis du retter .procmailrc til:

:0:
| sed -e '1,/^$/ d' | mimencode -uq >>/home/brugernavn/bodyfil

De to parametre til mimencode betyder: u - decode istedet fo encode og q - quoted-printable i stedet for standard, som er base64

Hvis ikke du har mimencode, kan du måske finde den. Hos mig hedder pakken, den er i, metamail. (Ellers skulle det ikke være svært, at lave et lille filter til den med sed.)
Avatar billede htm Nybegynder
21. maj 2004 - 23:19 #5
ok - jeg har ikke mimencode, og kan ikke lige umiddelbart finde den. Så jeg klarer adskillelsen via php eller lign. Men mange tak for forklaringen.

Mange tak for hjælpen, og nu må du hellere få dine velfortjente point. :o)
Avatar billede Slettet bruger
22. maj 2004 - 00:02 #6
Ellers burde man kunne erstatte mimencode -uq med noget i denne stil:

:0:
| sed -e '1,/^$/ d' | sed -e 's/=\r\n$//' >>/home/brugernavn/bodyfil

Den fjerner dog kun de ekstra linieskift med = før.

Eller, hvis du vælger at gøre det i PHP, så er der ligefrem en specifik funktion til det.

$tekst=qouted_printable_decode($tekst);
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester