 
 
 Ein Offline-Email-System
Zwar kann man email auch online lesen und bearbeiten, aber auf Dauer kommt das etwas teuer - selbst im City-Bereich. Also was tun?
Zwei Programme kann man heranziehen, damit man email daheim in aller Ruhe bearbeiten kann. Das eine ist sendmail, das andere popclient.
Bevor wir in die Tiefen von sendmail und popclient einsteigen, müssen wir noch die Datei /etc/hosts um den Eintrag des Mailservers erweitern. Wer bei der Installation von isdn4linux die Datei i4l.config kreiert hat und "makeleaf" eingegeben hat, bei dem ist das korrekt eingebaut. Wer das nicht tun wollte, muß eingeben:
/etc/hosts (Ausschnitt) <IP-Adresse> <Name_des_Mailservers> getmail
/usr/src/sendmail/cf/cf/linux.beliebig.mc # Meine eigene sendmail.cf include(`../m4/cf.m4')dnl # muß sein!!! VERSIONID(`beliebig')dnl # Version nach Gusto benennen OSTYPE(linux)dnl # Wir machen Linux! FEATURE(nodns)dnl # Kein eigener Nameserver FEATURE(nocanonify)dnl # Beim Senden DNS nicht benutzen FEATURE(nouucp)dnl # Wir benutzen kein UUCP define(SMART_HOST, relay:<fully.named.mailhost>)dnl # Post an: siehe /etc/hosts define(confCON_EXPENSIVE, True)dnl # Post verteilen ist teuer MASQUERADE_AS(<provider.name>)dnl # Wir mimen "Provider" define(confUSERDB_SPEC, /etc/userdb.db)dnl # Adresskorrektur FEATURE(notsticky)dnl # Userdatabase immer durchforsten MAILER(local)dnl # Benutzte Mailer: MAILER(smtp)dnl # local, Simple Mail Transfer Prot.Dem sendmail muß man jetzt nur noch kundtun, was Sache ist:
root:# m4 linux.beliebig.mc > /etc/sendmail.cf root:# _Man muß seine email-Adresse so angeben, daß ein "Reply" zuverlässig wieder zurückkommt - das bedeutet, die From:-Zeile im Email-Header muß auf den Account beim Provider lauten. Das wird einerseits durch die Zeile "MASQUERADE_AS ..." im m4-Script erledigt, andererseits durch eine Email-Nutzer-Datenbank (/etc/userdb.db). diese muß hergestellt werden. Dazu editiert man eine Datei, in die pro Nutzer zwei Zeilen eingetragen werden müssen:
/etc/userdb.db <eigener_login_name>:mailname <provider_login_name> <provider_login_name>:maildrop <eigener_login_name>Dieses muß in ein für sendmail lesbares Format umgesetzt werden:
root:# makemap btree /etc/userdb.db < /etc/userdb root:# _(Laut sendmail-FAQ funktioniert das nur, wenn man das Berkeley-db-Paket hat - das ist aber z.B. bei S.u.S.E. 4.2 der Fall.)
Nach einem Reboot (alternativ kann man den sendmail auch killen und mit der Option "-bd" wieder neu starten) hat man einen funktionierenden Postmeister.
Sendmail läuft als Dämon im Hintergrund, und man kann ihn dazu bringen, alle selbstgeschriebene email zu sammeln (sie wird in /var/spool/mqueue oder /var/mqueue zwischengelagert) und erst auf Kommando ("sendmail -q") über die Telefonleitung zu schicken.
Damit das richtig funktioniert, muß sendmail beim Booten als Dämon ohne die "-q ..."-Option aufgerufen werden. Der Aufruf geschieht bei simpleinit in der zweiten Hälfte der Start-Datei /etc/rc.d/rc.M, bei sysvinit passiert es in einer Extradatei, bei SuSE 4.2 heisst sie /sbin/init.d/sendmail. Hier muß die genannte Option entfernt werden ("-bd" muß bleiben, das ist für sendmail der Befehl, sich als Dämon in den Hintergrund zu begeben).
Andere Mailer sind aber recht eigenwillig. Programme wie pine oder Netscape überschreiben den Header ziemlich hemmungslos mit dem, was sie für richtig halten (was es in der Regel aber ganz und gar nicht ist)...
Netscape
liest die Datei ~/.netscape/preferences ein, die man editieren kann. Dort findet man die Zeile
~/.netscape/preferences (Ausschnitt) [...] EMAIL_ADDRESS: <Email@Adresse> [...]Die Adresse muß mit der gewünschten Adresse ausgefüllt werden.
Pine
hat diese Angelegenheit schon wesentlich besser versteckt. Und zwar so gut, daß ich bisher nicht herausfinden konnte, wie man es hinbekommen kann. Da pine mein bevorzugter Mailer ist, finde ich das sehr schade. Weiß jemand, wie man das Problem angehen kann? Problem: Die Domain läßt sich leicht im Setup oder in der Datei ~/.pinerc einstellen, nicht aber der Username. Scheint so, als müßte ich mal einen Patch machen :-(
XEmacs
(Hinweise hierzu hat mir dankenswerterweise Markus Dickebohm <m.dickebohm@uni-koeln.de> geschickt.)
Beim XEmacs kann man die Mailadresse mittels
        (setq user-mail-address "m.dickebohm@uni-koeln.de")
        (setq mail-host-address "mail.rrz.uni-koeln.de")
in der Datei ~/.emacs faken. Auch hier keine ideale Sache, der Header
wird nicht in Ruhe gelassen.
Weitere Mailer
Wer Informationen zu weiteren MUAs (Mail User Agents, also Mailprogrammen) hat, möge diese bitte mir zukommen lassen. Vielen Dank!
~:# popclient -3 -u<host-login> -p<host-password> -o/var/spool/mail/<user> getmail ~:# _getmail ist der in /etc/hosts definierte Mailhost. Gibt man zusätzlich noch die Option "-k" mit an, werden die Emails beim Provider nicht gelöscht.
/sbin/transmail
  #!/bin/sh
  # transmail.sh: exchanges email with the provider.
  # Author:       Bernhard Hailer <dl4mhk@lrz.uni-muenchen.de>
  # Version:      3.0 (01-Sep-96)
  . /etc/i4l.config
  . /etc/i4l.param
  cd /                                # against PATH=. effect
            
  echo -----------------------------------------------------------------------
  echo -e "Starting mail transfer: \c"; date
  declare -i con_apps                 #  makes it comfortable
  read con_apps </etc/lines.active
  let con_apps+=1
  echo $con_apps >/etc/lines.active
  line="0"
          
  while [ $line!="finished" ]
  do
    if [ $con_apps -lt 2 ]
    then
      echo "Calling ippp$line"
      /sbin/isdnctrl dial ippp$line
      echo "Sleeping 8 sec for PPP handshaking..."
      sleep 8s
      /sbin/route add default ippp$line
      echo "Line open - checking server..."
    else
      let con_apps-=1
      echo "Line seems to be open already $con_apps time(s) - checking..."
      let con_apps+=1
    fi
    
    echo "Checking Server..."
    set `ping -qc5 -i1 prvdr$line | grep transmitted`
    if [ $4 -gt 0 ];
    then
      echo ":-) Dial-in server running - checking mail server..."
      set `ping -qc5 -i1 getmail | grep transmitted`
      if [ $4 -gt 0 ];
      then
        echo "8-) Mail server online - starting mail exchange"
        echo "Sending mail..."
        sendmail -q
        echo "Again sleeping 2 sec for PPP handshaking"
        sleep 2
        echo "Fetching mail..."
        popclient -3 -u $MAIL_LOGIN -p $MAIL_PASSWD -o $MAIL_PATH getmail   
        echo "Again sleeping 2 sec for PPP handshaking"
        sleep 2
        line="finished"                                   # paranoia setting
        break
      else   
        echo ":-[ Sorry - mail server is down. Try later..."
        line="finished"                                   # paranoia setting
        break
      fi
    else
      /sbin/isdnctrl hangup ippp$line
      route del default
      read con_apps </etc/lines.active
      echo "0" >/etc/lines.active
      if [ $con_apps -gt 0 ]
      then
        echo ":-| Hmm, no. Trying to rebuild..."
        let con_apps=1
        echo $con_apps >/etc/lines.active
        line="0"                                        # paranoia setting
        continue
      else
        case $line in
        0)
          if [ $PROV_NAME_2 = "" ]
          then
            echo ":-[ Sorry, Line is down. Bad luck... Try later!"
            line="finished"
            echo "0" >/etc/lines.active
            con_apps=1
            break
          else
            echo ":-( Sorry, Line 0 is down. Trying second line."
            line="1"
            continue
          fi
          ;;
        1)
          echo ":-[ Sorry, Line 1 is also down. Bad luck... Try later!"
          line="finished"
          echo "0" >/etc/lines.active
          con_apps=1
          break
          ;; 
        *)
          echo ":-0 THIS CANNOT HAPPEN. Fatal Error in script /sbin/transmail!"
          break
          ;;
        esac
      fi
    fi
  done
  read con_apps </etc/lines.active
  let con_apps-=1
  echo $con_apps >/etc/lines.active
  if [ $con_apps -eq 0 ]
  then
    echo "Last application stopped - closing line."
    /sbin/isdnctrl hangup ippp0
    /sbin/isdnctrl hangup ippp1   
    /sbin/route del default         #  and delete route.
  else
    echo "There are $con_apps more applications running - keeping line."
  fi
            
  # allow dl4mhk access to mail:
  chown dl4mhk.users /var/spool/mail/dl4mhk
            
  echo -e "Finished mail transfer: \c"; date
Die sleep-Befehle sind wichtig - sonst bleibt die Verbindung 
womöglich hängen!
1.) cron-Datei verändern.
root:# cd ~ root:# cp /var/spool/cron/crontabs/root .crontab root:# _An die Datei .crontab hängt man folgende Zeilen an:
# Transfer mail 30 04 * * * /sbin/transmail.sh 1>> /var/log/transmail-log 2>> /var/log/transmail-log2.) Dem cron die Änderung bekannt machen.
crontab .crontabDen Rest erledigt die Uhr des Rechners. Alltäglich nachts um halb fünf Uhr wird die Post erledigt! (Anmerkung: die Rechnerzeit muß natürlich richtig gesetzt sein; man date; man clock.)
Hier muß man eine Kosten-/Nutzen-Rechnung aufstellen: der dauerlaufende Rechner kostet Strom - und nicht zu knapp. Bei mir geht das trotzdem so, es ist halt so bequem...