PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Name des Versenders aus Email-Header mit Shell-Script ermitteln



detonation997
25.09.02, 16:27
Hallo!

Ich möchte eine "Mail-Antwort"-Maschine in Shell-Scripten schreiben. Dazu wird eine Mail zuerst auf der Festplatte (oder einer Ramdisk) gespeichert (per Fetchmail geholt) und einerseits in den IMAP-Ordner des jeweiligen Benutzers verschoben und gleichzeitig derart zerlegt, dass sowohl die Absender-Email (funktioniert schon) und der Name des Benutzers vorliegen (das is das Problem):

Beispiel-Header:
=============================================
Received: from server.provider.com [215.73.21.136]
by localhost with POP3 (fetchmail-5.9.11)
for cyrus@localhost (single-drop); Wed, 25 Sep 2002 14:54:08 +0200 (CEST)
Received: from mx0.gmx.net ([213.165.64.100]) by server.provider.com with Microsoft SMTPSVC(5.0.2195.2966);
Wed, 25 Sep 2002 15:13:08 +0200
Received: (qmail 20275 invoked by uid 0); 25 Sep 2002 12:54:51 -0000
Date: Wed, 25 Sep 2002 14:54:51 +0200 (MEST)
From: "Dipl. Ing. Hans Wurst" <hans.wurst@provider.de>
To: petzi.baer@theater.de
MIME-Version: 1.0
Subject: testnachricht von gmx
=============================================

Die Email-Adresse bekomme ich mit:

RETURNPATH=`/usr/bin/awk '/From:*@*/ {print $0}' /tmp/mail_tmp | cut -d"<" -f2 | cut -d">" -f1 | head -n 1

Den Namen wollte ich per:

NAME=`/usr/bin/awk '/From:*@*/ {print $0}' /tmp/mail_tmp | head -n 1 | tr -d '"' | cut -d":" -f2 | cut -d"<" -f1`

herausfischen.

Allerdings befindet sich dann am Ende und am Anfang ein Leerzeichen.
In diesem Fall also: " Dipl. Ing. Hans Wurst " (ohne die Anführungszeichen)

Wie bekomm ich die weg?
Danke schon im Voraus!

RapidMax
25.09.02, 17:16
/usr/bin/awk '/^From:.+@.+/ {print $0}' email.txt | \
head -n 1 | \
sed 's/^From: *"\(.*\)" <\([[:alnum:].-]*@[[:alnum:].-]*\)>/Die Addresse \2 gehört zu \1/'Reagiert aber Empfintlich auf eine falsche Syntax. Aber es handelt sich dann einfach um Mehrarbeit, die grundsätzliche Idee ist so besser ersichtlich.

Gruss, Andy

detonation997
25.09.02, 17:42
Danke!

An "sed" hab ich auch schon gedacht, nur hab ich damit noch nie etwas gemacht...

NAME=`/usr/bin/awk '/From:*@*/ {print $0}' /tmp/mail_tmp | head -n 1 | tr -d '"' | cut -d":" -f2 | cut -d"<" -f1 | sed 's/ *$//'`

So funktionierts - mit Hilfe der Anleitung von: http://www.tldp.org/LDP/abs/html/x14575.html