PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Formail Header manipulieren



n00bie
19.01.12, 10:52
Hallo zusammen,

ich muss mich hier zum Einstieg als ziemlicher Linux noob outen...
Ich habe ein Ubuntu aufgesetzt, welches ich in erster Linie für Nagios brauche. Da dort ein GSM Modem angeschlossen ist, um Nagios-Alarme an Handys zu verschicken, wollte ich das System gleich um ein email2sms Gateway erweitern.

Das funktioniert mit den SMS Server Tools und dem enthaltenen Script email2sms so weit: wenn ich im To:Feld eingebe: "Name +491234567" <sms@mydomain.de> abschicke, wird die Nummer aus dem Header übernommen.

Die dafür zuständige Zeile in dem Script scheint diese zu sein:

destinations=`formail -zx "To:" < $tmp`

Das ganze Script sieht so aus:
tmp=$(mktemp /tmp/smsgw.XXXXXX)
cat >$tmp
destinations=`formail -zx "To:" < $tmp`
IFS=,
for destination in $destinations; do
destination=${destination## }
OUTFILE=$(mktemp /var/spool/sms/outgoing/smsgw.out.XXXXXX)
formail -f -I "To: $destination" < $tmp > $OUTFILE
chmod 666 $OUTFILE
echo "SMS queued to $OUTFILE"
done
rm $tmp


Leider haben wir 2 Anwendungen, die Emails automatisch an definierte Empfänger verschickt. Dort lässt sich das Format mit dem vorangestellten Alias nicht so eingeben, es wird nur eine Email-Adresse akzeptiert.

Mein Ziel ist also, für jedes Handy, welches Alarmierungen bekommen soll ( 3 oder 4 Stück) eine Email-Adresse im Format 491721234567@mydomain.de anzulegen.
Dann soll das Script vor den Zahlen ein + anfügen und alles ab dem @ wegschneiden.

Ich habe es hiermit probiert:
destinations=`formail -z -x"To:" | cut -d'@' -f1 ' < $tmp`

Das funktioniert so aber leider nicht.

Hat jemand eine Idee, wie ich das mit formail bewerkstelligen kann?
Ich hatte schon versucht, im Forum von Keke Kasvi, der die SMS Tools und das Script programmiert hat, eine Antwort zu bekommen, aber dort ist leider nicht mehr allzu viel los.

Vielleicht könnte mir auch jemand helfen, das Script vollständig zu verstehen,
insbesondere die Zeilen :
destinations=`formail -zx "To:" < $tmp`
IFS=,
OUTFILE=$(mktemp /var/spool/sms/outgoing/smsgw.out.XXXXXX)
formail -f -I "To: $destination" < $tmp > $OUTFILE

verstehe ich nicht wirklich...

Vielen Dank an alle, die bis hierhin gelesen haben :)
Und ein noch größerer Dank an jeden, der mir bei diesem Problem helfen kann.

LG, Matthias

n00bie
19.01.12, 16:06
Hi,

ich habe noch eine Ergänzung, nachdem ich ein bisschen gespielt habe:

Ich habe es wie gesagt mit der Zeile:
destinations=`formail -z -x"To:" | cut -d'@' -f1 ' < $tmp`

probiert. Auf der Kommandozeile funktioniert der cut Befehl wunderbar, aus 1234567@mydomain.de wird 1234567

Im Script funktioniert es leider nicht.
Dort steht dann im Output file im "To:" Feld:
To:19 Jan 2012 14:46:32 +0000

Also wird wohl etwas abgeschnitten, nur leider nicht da, wo ich es erwarte.

Hat jemand eine Idee dazu? Mir gehen langsam die Ideen aus, was ich noch probieren oder lesen könnte, damit das endlich läuft :mad:

LG, Matthias

n00bie
24.01.12, 13:30
Hi,

also da anscheinend niemand eine Antwort weiss, formuliere ich die Frage einmal um:

Was ich brauche: ein kleines Script, welches mir aus einer eingegangenen Email eine Textdatei anlegt.

In der Textdatei muss in der ersten Zeile
To: Telefonnummer

stehen. Die Telefonnummer sollte aus der Emailadresse extrahiert werden:
Beispiel: ich habe einen User mit der Emailadresse 491234567@mydomain.de
Wenn dieser User eine Email erhält, soll in dem Textfile in der ersten Zeile
To: 491234567 stehen, also alles vor dem @.

Dann sollte ein Zeilenumbruch erfolgen und dann der Body der Email in das Textfile eingefügt werden.

Ich vermute, dass dies mit procmail gehen müsste, aber ich weiss leider nicht so genau, wie.

Vielleicht hat ja doch noch jemand eine Idee dazu.

Vielen Dank und LG, Matthias

Newbie314
24.01.12, 13:55
"Regular Expressions". Ich verwende für solche Skripte immer Perl, die meisten ein Bash Skript.

Dort in ein Tutorial rein und mit den "regular expressions" experimentieren bis das rauskommt was du brauchst.

Edit: ich weiß nicht einmal welche Skriptsprache das ist.. steht in der ersten Zeile des SKriptes irgendwas mit #!/usr/.... ? Wenn ja das mal mit posten, dann kann man dir sagen welche Tutorials du ergooglen musst um das Skript zu verstehen und ändern zu können.

n00bie
24.01.12, 14:34
"Regular Expressions". Ich verwende für solche Skripte immer Perl, die meisten ein Bash Skript.

Dort in ein Tutorial rein und mit den "regular expressions" experimentieren bis das rauskommt was du brauchst.

Edit: ich weiß nicht einmal welche Skriptsprache das ist.. steht in der ersten Zeile des SKriptes irgendwas mit #!/usr/.... ? Wenn ja das mal mit posten, dann kann man dir sagen welche Tutorials du ergooglen musst um das Skript zu verstehen und ändern zu können.

Hi,

hm, hier ist das Script vollständig aus dem Paket kopiert, die erste Zeile #!/bin/sh steht auch genau so mit # in dem Script.

Zu schade, dass da nichts kommentiert ist :-(



#!/bin/sh

# Smsd can send eMails via SMS. You simply need to store the eMail as text
# file in the outgoing queue directory with a unique filename.

# The eMail must include the phone number in the To: field, for example:
# To: "Herbert +491721234567" <sms@localhost>

# This simple script creates a unique filename and copies the eMail from
# stdin to that file.

# If you use procmail to deliver local eMail. Create the user sms and create
# the file /home/sms/.procmailrc with this content:

# VERBOSE=off
# MAILDIR=/var/spool/mail
# DEFAULT=/var/spool/mail/sms
# LOGFILE=/var/log/procmail
#
# :0
# * ^TOsms
# | /usr/local/bin/email2sms



# If you use QMail and vpopmail you need the file
# /home/vpopmail/domains/your-domain/.qmail-sms with this content:

# | /usr/local/bin/email2sms

tmp=$(mktemp /tmp/smsgw.XXXXXX)
cat >$tmp
destinations=`formail -zx "To:" < $tmp`
IFS=,
for destination in $destinations; do
destination=${destination## }
OUTFILE=$(mktemp /var/spool/sms/outgoing/smsgw.out.XXXXXX)
formail -f -I "To: $destination" < $tmp > $OUTFILE
chmod 666 $OUTFILE
echo "SMS queued to $OUTFILE"
done
rm $tmp


Danke und Gruß,
Matthias

Newbie314
24.01.12, 18:06
Bourne Shell. Kannst also nach /bin/sh programmierung oder Bourne shell tutorial googlen und die Sprache lernen.

Soweit ich informiert bin kann die auch regular expressions... somit kannst du dir das was du benötigst in dieser Shell durch Änderung des SKriptes zusammenprogrammieren.

(Ich habe sie zu selten benutzt um dir ungetestet "mal schnell" diese Zeilen hinzuschreiben..)

n00bie
25.01.12, 10:25
Hi, danke Dir, das bringt mich schon mal ein bisschen weiter.
Ich habe es schon mal so weit angepasst, dass ich die SMS an "statische" Empfänger verschicken kann, indem ich jedem Emailempfänger eine .procmailrc mit eigenem Script, in dem die Nummer dann fest verdrahtet ist, verpasst habe.

Das ist zwar nicht sehr elegant, für den Moment reicht das für meine Zwecke aber aus.

Das gibt mir erst mal wieder Zeit, und wenn ich das dann doch mal dynamischer brauche, lerne ich halt Bourne Shell :cool:

Danke nochmal.
Gruß, Matthias