Ich hab das auf etwa 250 Mails getestet, das geht mit Claws-Mail recht gut, weil dort alle Mails als einzelne Dateien hinterlegt sind und ein "for...do...done" reicht, um zu testen.
Das obige Script läuft bei vielen Mails hier nicht zufriedenstellend (ich wünschte, es wäre anders...).
Habe selber etwas zusammengezimmert, was ziemlich grottig ist und auch nicht bei allen Mails saubere Ergebnisse bringt. Man kann die jeweilige Mail mit dem Seamonkey-Mail-Editor öffnen (direkt 'öffne Datei' im Menü). Da wird dann "jeder Mist" korrekt dargestellt!
Zu dem Script: Es geht davon aus, daß wenn im Header bereits eine 'Content-Type' Angabe ist, der Nachrichten-Teil zwischen Header und den Anhängen findet.
Wenn es eine Multipart-Message ist, findet sich der Content-Type im Body, und zwar in *fast, fast* allen Fällen Text/Plain vor Text/Html.
Nach dieser Methode wird der Nachrichten-Teil herausgelöst, Plain-Text wird vor Html bevorzugt. Betreffs der Codierung wird dann weitergesehen.
Wenn Ihr das Script testen wollt, werdet Ihr es anpassen müssen, es ist ziemlich hausbacken und benutzt zB zwei temporäre Dateien zum zwischenspeichern.
Meine Fähigkeiten sind halt begrenzt...
Die Farbangaben und das Verzeichniss "$SRC" kommen aus dem ". inc" am Anfang, das müsstet ihr sinnfällig ersetzen! Ich schicke das Script gleich mit, find ich persönlich nett.
Zum Konvertieren von "quoted-printable" benutze ich "hex2txt", das funktioniert hier besser als zB " python -m quopri -d", warum auch immer...
Zum Konvertieren von iso nach utf benutze ich "iconv -c -s -f ISO-8859-15 -t UTF-8 2>/dev/null" in einem Script namens "iso2utf".
Zum Konvertieren von Html "html2text" aus dem repository, das ist Python.
Zum Konvertieren von Base64 "base64 -d".
Für Form & Stil entschuldige ich mich hier vorsichtshalber schon mal...

:-D
mail2txt:
Code:
#!/bin/sh
## mail2txt [file]
## extrahiert den Text aus einer Email
# 01.03.2019
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
. inc
FILE=$1
# echo -e $hellrot$FILE$def
TMP=$SRC/tmp/mail2txt
TMP0=$TMP/`echo $FILE | tr '/' '-'`_0.tmp
TMP1=$TMP/`echo $FILE | tr '/' '-'`_1.tmp
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# UMBEKANNTES ZEICHEN AM DATEIENDE /////////////////////////////////////////////////
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Es gibt offenbar Dateien mit einem im Editor nicht angezeigten Zeichen am
# Zeilenende, was z.B. den Ausdruck "egrep '^$'" für eine Leerzeile verunmöglicht
# und mit 'sed' entfernt werden muss:
cat $FILE | sed 's|[[:space:]]\?$||g' > $TMP1
FILE=$TMP1
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# ATTACHMENTS , BODY ///////////////////////////////////////////////////////////////
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
MIME='(application|image|audio|video)'
BEGIN_ATTMENTS=`egrep -in "Content-Type: $MIME" $FILE | tr '\n' ' ' | sed 's|:.*||g'`
BEGIN_MAILBODY=`egrep -n "^$" $FILE | tr '\n' ' ' | sed 's|:.*||g'`
if [ -z "$BEGIN_ATTMENTS" ] ; then BEGIN_ATTMENTS='$' ; fi
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# CONTENT-ANGABE IM HEADER ////////////////////////////////////////////////////////
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
HEAD_TYPE_TEXT=`sed -n '1,/^$/p' $FILE | egrep -in 'Content-Type: text/plain' | tr '\n' ' ' | sed 's|:.*||g'`
HEAD_TYPE_HTML=`sed -n '1,/^$/p' $FILE | egrep -in 'Content-Type: text/html' | tr '\n' ' ' | sed 's|:.*||g'`
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# CONTENT-ANGABE IM BODY //////////////////////////////////////////////////////////
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if [ -z "$HEAD_TYPE_TEXT" -a -z "$HEAD_TYPE_HTML" ] ; then
BODY_TYPE_TEXT=`egrep -in 'Content-Type: text/plain' $FILE | tr '\n' ' ' | sed 's|:.*||g'`
BODY_TYPE_HTML=`egrep -in 'Content-Type: text/html' $FILE | tr '\n' ' ' | sed 's|:.*||g'`
fi
#=========================================================================================
#///// FEHLERSUCHE ////////////////////////////////////////////////////////////////////
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# echo 'BEGIN_MAILBODY '$BEGIN_MAILBODY
# echo 'BEGIN_ATTMENTS '$BEGIN_ATTMENTS
# echo -e $hellrot'HEAD:'$def
# echo 'HEAD_TYPE_TEXT '$HEAD_TYPE_TEXT
# echo 'HEAD_TYPE_HTML '$HEAD_TYPE_HTML
# echo -e $hellrot'BODY:'$def
# echo 'BODY_TYPE_TEXT '$BODY_TYPE_TEXT
# echo 'BODY_TYPE_HTML '$BODY_TYPE_HTML
#
#=========================================================================================
#///// AUSWERTUNG NACH TMP /////////////////////////////////////////////////////////////
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if [ -n "$HEAD_TYPE_TEXT" ] ; then
sed -n "$BEGIN_MAILBODY,$BEGIN_ATTMENTS"p $FILE > $TMP0
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
elif [ -n "$HEAD_TYPE_HTML" ] ; then
TYPE_HTML='x'
sed -n "$BEGIN_MAILBODY,$BEGIN_ATTMENTS"p $FILE > $TMP0
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
elif [ -n "$BODY_TYPE_TEXT" ] ; then
if [ -n "$BODY_TYPE_HTML" ] ; then BEGIN_ATTMENTS=$BODY_TYPE_HTML ; fi
sed -n "$BEGIN_MAILBODY,$BEGIN_ATTMENTS"p $FILE > $TMP0
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
elif [ -n "$BODY_TYPE_HTML" ] ; then
TYPE_HTML='x'
sed -n "$BEGIN_MAILBODY,$BEGIN_ATTMENTS"p $FILE > $TMP0
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
else
echo 'NO TEXT-CONTENT' > $TMP0
fi
# cat $TMP0 ; rm $TMP/* ; exit
#=========================================================================================
#///// BEARBEITEN //////////////////////////////////////////////////////////////////////
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# UTF 8 ///////////////////////////////////////////////////////////////////////////
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Es kann sein, daß dieser folgende Schritt überflüssig ist.
# Ich weiss nicht, warum '< $TMP0 > $TMP1' nicht funktioniert.
# ...armes, missbrauchtes cat...
TEST_ISO=`file $TMP0 | grep 'ISO'`
if [ -n "$TEST_ISO" ] ; then
cat $TMP0 | iso2utf > $TMP1
else
cat $TMP0 > $TMP1
fi
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# BOUNDINGS ///////////////////////////////////////////////////////////////////////
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Es wird davon ausgegangen, daß Boundings mit '--' anfangen, und danach alles
# mögliche enthalten nur keine Leerzeichen. Sie *müssen* aber auch andere Zeichen
# als '-' enthalten, darum das zweite 'grep'.
# Es gibt auch Boundings mit '/', welches ersetzt werden muss!
BOUNDINGS=`egrep '^\-\-[^[:space:]]{5,}' $TMP1 | grep '[0-9a-z]' | tr '/' '.'`
for BOUNDING in $BOUNDINGS ; do sed -i "/$BOUNDING/d" $TMP1 ; done
# echo $BOUNDINGS | tr ' ' '\n' ; exit
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# ERSETZUNGEN /////////////////////////////////////////////////////////////////////
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CONTENTS='(Type|Transfer|Disposition)'
egrep -vi "^[[:space:]]*Content-$CONTENTS" $TMP1 |\
egrep -vi 'boundary=' |\
egrep -vi 'charset=' |\
egrep -vi 'Mime-Version' |\
egrep -vi 'This is a multi-part message in MIME format' |\
\
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# ...ggF mehr hinzufügen!
#
# Leerzeilen am Anfang und Ende:
# http://sed.sourceforge.net/sed1line_de.html
\
sed '/./,$!d' |\
sed '/^[[:space:]]*$/{:a;$d;N;/\n[[:space:]]*$/ba}' \
\
> $TMP0
# cat $TMP0 ; exit
#=========================================================================================
#///// ENCODING ////////////////////////////////////////////////////////////////////////
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# Die hier verwendeten Suchmuster könnten ohne weiteres auch durch Auslesen
# von "Content-Transfer-Encoding" ermittelt werden, sollten aber in der Praxis
# funktionieren:
#
# ===========================================
# Content-Transfer-Encoding: quoted-printable
# ===========================================
TEST_HEX=`egrep '=[A-Za-z0-9]' $TMP0`
# echo $TEST_HEX ; exit
# =================================
# Content-Transfer-Encoding: base64
# =================================
# http://www.zotteljedi.de/base64/
TEST_BASE=`egrep -in '^[a-z0-9+/]{60,}[[:space:]]?$' $TMP0 | tr '\n' ' ' | sed 's|:.*||g'`
# echo $TEST_BASE ; exit
if [ -n "$TEST_HEX" ] ; then
cat $TMP0 | hex2txt > $TMP1
elif [ -n "$TEST_BASE" ] ; then
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Wenn *vor* dem Base64-Code noch anderer Text ist, kann nicht encodiert
# werden. Darum werden alle Zeilen bis zu dem ersten Treffer von 'egrep'
# in "$TEST_BASE" entfernt:
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if [ "$TEST_BASE" -gt 1 ] ; then
BASE=$(( $TEST_BASE - 1 ))
# cat $TMP0 | sed "1,/$BASE/d" ; exit
cat $TMP0 | sed "1,/$BASE/d" | base64 -d > $TMP1
else
cat $TMP0 | base64 -d > $TMP1
fi
else
cat $TMP0 > $TMP1
fi
# cat $TMP1 ; exit
# =======================
# Content-Type: text/html
# =======================
if [ -n "$TYPE_HTML" ] ; then
cat $TMP1 | html2text | sed 's|!\[\]()||g' > $TMP0
else
cat $TMP1 > $TMP0
fi
#=========================================================================================
#///// ÜBERFLÜSSIGES ENTFERNEN //////////////////////////////////////////////////////////
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# Es gibt Ausgaben ohne abschließenden Zeilenumbruch:
echo '' >> $TMP0
cat $TMP0 |\
\
# mehr als zwei Leerzeilen am Stück:
\
tr '\n' '^' | sed 's|\^^^\+|^|g' |\
\
# wiederum Zeilenumbrüche:
\
sed 's|^\^\+||g' | sed 's|\^\+$||g' | tr '^' '\n' |\
\
# alle Links:
\
egrep -v 'https?:' |\
\
# alle warum auch immer vorhandenen Html-Tags:
\
sed 's|<[^>]\+>||g'
# to be continued...
echo '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'
rm $TMP/* ; exit
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@FIN@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
hex2txt:
Code:
#!/bin/sh
## hex2txt
## konvertiert hexadezimal kodierte Sonderzeichen in Emails in normale Zeichen um,
## sowohl fuer ISO 8859 als auch UTF-8. Content-Transfer-Encoding: quoted-printable
#
# 23.03.2019
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
. inc
# siehe:
# www.gerhard-fobe.de/besondere-zeichen-wie-umlaute-in-mailheadern-und-mailinhalten/
#
# Alle E-Mails müssen im Zeichensatz US-ASCII verfasst werden und zwar ohne
# länderspezifische Erweiterungen durch Codepages, wo dann auch die Umlaute
# beinhaltet wären.
#
# Somit müssen alle Umlaute und besondere Sprachzeichen in eine Hexadezimaldarstellung
# umgewandelt werden. Dabei muss der Hexadezimaldarstellung ein "=" vorangestellt werden.
# Somit wird bspw. ö zu =F6.
#
# Doch aufgepasst:
# Es muss die allgemeine Zeichenkodierung der E-Mail beachtet werden.
#
# In deutsch finden dabei die Zeichenkodierungen ISO 8859 oder UTF-8.
# In UTF-8 wäre ö das Zeichen U+00F6, welches hexadezimal dann =C3=B6 dargestellt würde.
#
# www.utf8-zeichentabelle.de/unicode-utf8-table.pl
# www.ude.de/internet/ansi-zeichen-in-e-mails.html
#
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#//// UTF8 ///////////////////////////////////////////////////////////////////////////
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
sed 's|=c3=84|Ä|gi' | sed 's|=c3=96|Ö|gi' | sed 's|=c3=9c|Ü|gi' |\
sed 's|=c3=a4|ä|gi' | sed 's|=c3=b6|ö|gi' | sed 's|=c3=bc|ü|gi' |\
\
sed 's|=c3=9f|ß|gi' | sed 's|=E2=80=A2|-|gi' | sed 's|=C2=A7|§|gi' |\
\
sed 's|=E2=80=9E|"|gi' | sed 's|=E2=80=9C|"|gi' | sed 's|=E2=82=AC|E|gi' |\
\
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#//// ISO ////////////////////////////////////////////////////////////////////////////
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\
sed 's|=C4|Ä|gi' | sed 's|=D6|Ö|gi' | sed 's|=DC|Ü|gi' |\
sed 's|=E4|ä|gi' | sed 's|=F6|ö|gi' | sed 's|=FC|ü|gi' |\
\
sed 's|=DF|ß|gi' | sed 's|=B4|-|gi' | sed 's|=A7|§|gi' |\
\
sed 's|=93|"|gi' | sed 's|=94|"|gi' |\
\
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#//// WEITERES ///////////////////////////////////////////////////////////////////////
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Kodierungen zum Zeilenumbruch sind kompliziert:
\
tr '\n' '^' | sed 's|=[[:space:]]*^||g' | tr '^' '\n' | sed 's|=20||g' |\
\
# alles oben nicht erkannte:
\
sed 's|\(=\([A-Z0-9]\)\{2\}\)\{1,2\}| |gi'
# sed 's|\(\(=\([A-Z0-9]\)\{2\}\)\{1,2\}\)|[\1]|gi'
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@FIN@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Konsole-Farben:
Code:
#! /bin/sh
## color [-show]
## "echo -e $farbname .. $def"
## stellt Konsolefarbe zur Verfuegung.
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
. help
# Def: die normale Textfarbe der verwendeten Konsole:
def="\033[0m"
##
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
## TEXT:
## schwarz, grau, rot, hellrot, gruen, hellgruen, braun, gelb,
## blau, hellblau, magenta, rosa, cyan, hellcyan, weiss, hellgrau
schwarz="\033[00;30m"
grau="\033[01;30m"
rot="\033[00;31m"
hellrot="\033[01;31m"
gruen="\033[00;32m"
hellgruen="\033[01;32m"
braun="\033[00;33m"
gelb="\033[01;33m"
blau="\033[00;34m"
hellblau="\033[01;34m"
magenta="\033[00;35m"
rosa="\033[01;35m"
cyan="\033[00;36m"
hellcyan="\033[01;36m"
weiss="\033[00;37m"
hellgrau="\033[01;37m"
##
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
## HINTERGRUND:
## BGschwarz, BGrot, BGgruen, BGgelb, BGblau, BGmagenta, BGcyan, BGhellgrau
BGschwarz="\033[40m"
BGrot="\033[41m"
BGgruen="\033[42m"
BGgelb="\033[43m"
BGblau="\033[44m"
BGmagenta="\033[45m"
BGcyan="\033[46m"
BGhellgrau="\033[47m"
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
# SHOW:
if [ "$1" = '-show' ] ; then echo -e "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$schwarz schwarz$def $grau grau $def
$rot rot $def $hellrot hellrot $def
$gruen gruen $def $hellgruen hellgruen $def
$braun braun $def $gelb gelb $def
$blau blau $def $hellblau hellblau $def
$magenta magenta$def $rosa rosa $def
$cyan cyan $def $hellcyan hellcyan $def
$weiss weiss $def $hellgrau hellgrau $def
$BGschwarz $def BGschwarz $BGrot $def BGrot
$BGgruen $def BGgruen $BGgelb $def BGgelb
$BGblau $def BGblau $BGmagenta $def BGmagenta
$BGcyan $def BGcyan $BGhellgrau $def BGhellgrau
"
exit 0
fi
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@FIN@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Ps: Wer ein korrektes Absendedatum möchte, kann das so bekommen:
Code:
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#///// NAMENSGEBUNG ////////////////////////////////////////////////////////////////////
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# Die Namensgebung der Dateien soll der Timestamp aus dem Absendedatum der Mail
# sein. Dies scheint bei allen Emails gleich zu sein:
#
# "Date: Tue, 22 Jul 2014 19:25:36 +0200"
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Zunächst nur der mittlere Teil "22 Jul 2014 19:25:36", der sich offenbar direkt
# in einen Timestamp konvertieren lässt. Wir nehmen nur Angaben aus dem Header:
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# echo $1
EXPR='[0-9]\{1,2\} [A-Za-z]\{3\} [0-9]\{4\} [0-9:]\{8\}'
BASE_DATE=`sed -n '1,/^$/p' $1 | egrep '^Date:' | sed "s|^.* \($EXPR\).*$|\1|g"`
BASE_TIMESTAMP=`date -d "$BASE_DATE" +%s`
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Weiterhin interessiert der sogenannte Offset, der die Differenz zur Weltzeit
# darstellt und berücksichtigt werden muss, soll die Reihenfolge korrekt werden.
# Die Angabe ist +-Stunde Minute
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
KORR_DATE=`sed -n '1,/^$/p' $1 | egrep '^Date:' | sed 's|^.*\([+-][0-9]\{4\}\).*$|\1|g' | egrep '[+-][0-9]{4}'`
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# In allen mir untergekommenen Mails ist die Stundenangabe einstellig, egal.
# Mit einem leeren Operator lässt sich nicht rechnen, wenn er '-' ist,
# wird das überschrieben:
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
OPERATOR='+'
OPERATOR=`echo $KORR_DATE | sed 's|\([+-]\)[0-9][0-9][0-9][0-9]|\1|g'`
KORR_HRS=`echo $KORR_DATE | sed 's|[+-]\([0-9][0-9]\)[0-9][0-9]|\1|g' | sed 's|^0||g'`
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Heraus kommt im obigen Beispiel "2" Stunden. Gibt es keine Offset-Angabe, bleibt
# die Ausgabe leer, womit sich ebenfalls nicht rechnen lässt:
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if [ -z "$KORR_HRS" ] ; then KORR_HRS='0' ; fi
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 1h = 60x60 = 3600s:
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
KORR_TIMESTAMP=$(( $KORR_HRS*3600 ))
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Die Summe aus $BASE_TIMESTAMP und $KORR_TIMESTAMP sollte ein vergleichbares
# Ergebnis bringen und wird als Dateiname verwendet:
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
NAME=$(( $BASE_TIMESTAMP$OPERATOR$KORR_TIMESTAMP ))
# echo $NAME ; exit
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~