• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Datei aus Mail extrahieren per Skript

Status
Für weitere Antworten geschlossen.

Alhifi

Newbie
Hallo Linux-Profis,

ich hab (mal wieder) ein kleines ... Problem? Mhhh ... also ...

Ich würde gerne auf meinem kleinen SuSE 9.1-Linux-Server folgendes realisieren:

Mails an eine bestimmte Mail-Adresse werden an ein Skript (oder was auch immer) übergeben und verarbeitet, dabei sollen einfach nur die Dateianhänge aus der Mail "rausgeholt" und gespeichert werden. Gibt es da eventuell schon was in der Richtung?

Als zweites schwebt mir noch folgendes vor: Wiederum eine Mail an eine bestimmte Mail-Adresse wird ebenfalls an ein Skript übergeben. Die Mail enthält im Subject/Body eine URL, die dann von wget verarbeitet sprich downgeloaded wird. Gibt es ebenfalls schon was in der Richtung?

Hintergrund: Hier @work findet man schonmal im Internet das eine oder andere File, welches aber für einen Download bzw. den anschließenden Transport nach Hause zu groß ist. Da mein kleiner Server allerdings auch während der Tageszeit Mails abholt, wäre es eine feine Sache, wenn Dateien, die man sich nach Hause schickt, bereits extrahiert auf Festplatte liegen würden oder ggf. bereits von wget während der Tageszeit aus dem Internet gesaugt würden.

Vielen Dank für eure Hilfe!

Ciaoi
Alhifi
 

TeXpert

Guru
Du möchtest procmail verwenden, hier kannst Du alles aufrufen und mit den Mails machen was Spass macht, z.B. mit procmail ein Script in einer beliebigen P*-Sprache basteln, dass die Mail entsprechend auseinander nimmt, attachments dekodiert und speichert
 
OP
A

Alhifi

Newbie
Danke für die schnelle Antwort!

Mhhh, procmail?

Ich vergaß zu erwähnen, das ich froh bin, das auf meinem System "erfolgreich" eMails per fetchmail, postfix, antivir, amavis, spamassasin und cyrus verarbeitet werden, kann man denn da procmail noch integrieren???

Problem: Ich kann nicht programmieren, also nix mit Perl oder Shell-Skripten.

Kann man denn procmail so konfigurieren, das es nur für 1-2 Mail-Adressen aktiv wird, also z.B. über die alias-Tabelle starten, wenn halt eine Mail auf einer bestimmten Adresse ankommt, die dann in procmail pipen?

Ciaoi
Alhifi
 

TeXpert

Guru
ich sammel bei mir auch Mails mit fetchmail ein, allerdings nutze ich courier :D da der mir die Mails aus dem Homedir nimmt, dazu geht das ganz einfach:

fetchmail sammelt Mails ein, übergibt die an den User, der hat eine .forward mit
Code:
"| /usr/bin/procmail -t"
und die entsprechende Einsortierung wird über die .procmailrc gemacht

Bei cyrus könntest Du ähnlich vorgehen, indem Du die Einsortierung über (?) deliver in der procmailrc machst (Hint: ich hab keine cyrus Erfahrung) also ungefähr so:
Code:
:0
*^TO.*Adresse@example\.org
|/usr/lib/cyrus/bin/deliver <PARAMETER>

aber bei der Einbettung kann Dir google sicherlich besser weiterhelfen :)

zum Script, tja... Du kannst ja auch php oder so nehmen, aber ganz ohne lesen und basteln wirds nicht gehen, also Einstieg: in http://lists.suse.com/archive/suse-linux/2003-Jun/4799.html beschreibt Kristian Koehntopp, wie er mit procmail und php die Mails verarbeitet und in einer DB speichert, das hilft Dir evtl. schon mal weiter
 
OP
A

Alhifi

Newbie
Hallo TeXpert,

erstmal vielen Dank für deine ausführliche Antwort, das kommt der Sache schon etwas näher ... aber der Groschen ist leider bei mir noch nicht gefallen, sorry.

Ich war eigentlich davon ausgegangen, das ich meine aktuelle Konfiguration nicht großartig ändern muß, d.h. ich hatte mir überlegt, im meiner alias-Tabelle was einzutragen wie folgt:

archiv : "| /usr/local/skript.sh"

Wenn mein Verständnis dafür ausreicht, übergibt "irgendwer" der Komponenten (vermutlich doch postfix, oder?) die komplette Mail nach Abholung durch fetchmail an das Skript, welches dann die Mail verarbeiten soll.

Dein Link war dahingehend schon hilfreich bez. der Löschung des Headers aus der Mail, wie ich dann allerdings aus dem verbleibenden Rest des Bodys wieder eine Datei machen kann, wüßte ich aktuell leider nicht.

Ciaoi
Alhifi
 

oc2pus

Ultimate Guru
Vielleicht kannst du sowas gebrauchen ;)
zum Studium und abändern ;)

dieses Script zerlegt eine mail in seine Komponenten:
Code:
#! /bin/sh
# Usage: unmbox.sh dir < email

[ ! -d $1 ] && mkdir $1

cd $1
cat > input
formail -f -X '' < input > header # no blank lines
formail -I '' < input > body # blank lines at top/bottom

if grep -o "boundary=\"[A-Za-z0-9 '()+_,./:?-]*[A-Za-z0-9'()+_,./:?-]\"" header > boundary; then
	. boundary
	eboundary=`sed 's/[()+.?]/\\&/g' <<< "$boundary"`
	csplit body "/^--$eboundary/" '{*}' # xx00, xx01, ...
	for i in xx??; do
		if head -1 $i | egrep "^--$eboundary\$" > /dev/null; then
			sed '1d' $i | unmbox.sh $i.mbox
		fi
	done
else
	rm boundary
fi

dieses script baut aus den Komponenten eine email wieder zusammen:
Code:
#! /bin/sh
# Usage: mbox.sh dir > email

cd $1
sed '/^$/ d' header # NO blank lines in header

if [ -f boundary ]; then
	. boundary
	echo
	for i in xx??.mbox; do
		echo "--$boundary"
		mbox.sh $i
	done
	echo "--$boundary--"
	echo
else
	[ "`head -1 body`" ] && echo # blank line at top
	cat body
	[ "`tail -1 body`" ] && echo # blank line at bottom
	: # dummy, so that return code is 0
fi
 

TeXpert

Guru
Alhifi schrieb:
Ich war eigentlich davon ausgegangen, das ich meine aktuelle Konfiguration nicht großartig ändern muß, d.h. ich hatte mir überlegt, im meiner alias-Tabelle was einzutragen wie folgt:

archiv : "| /usr/local/skript.sh"

Wenn mein Verständnis dafür ausreicht, übergibt "irgendwer" der Komponenten (vermutlich doch postfix, oder?) die komplette Mail nach Abholung durch fetchmail an das Skript, welches dann die Mail verarbeiten soll.

wenn das so mit cyrus geht sollte das ja schon reichen, aber die Frage kann ja nur die Doku beantworten ;)

aber zur cyrus/procmail-Integration hab ich noch das hier in meinen Bookmarks gefunden: http://www.tuxfutter.de/wiki/Mailsystem_mit_SPAM-Filterung
 
Status
Für weitere Antworten geschlossen.
Oben