#

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

## sendmail

Auf die Low-Level-Konfiguration von sendmail will ich gar nicht erst eingehen - das überlasse ich Masochisten ;-) In meinem Falle setze ich eine Distribution ein (S.u.S.E. aktuell 4.2 Jun. 96; ELF), die sendmail in der Version R8 enthält. Diese läßt sich komfortabel mithilfe von m4-Scripts konfigurieren - siehe das zugehörige README. Ich habe die Originalkonfiguration ("`linux.smtp.mc`") übernommen und etwas bearbeitet. Man begebe sich nach `/usr/src/sendmail/cf/cf` und schreibe eine Datei `linux.beliebig.mc`, z.B.

    /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).

## Des Mailers Wille...

Mit dem UNIX-Klassiker mail funktioniert das Absenden von emails nun prächtig. Der Header wird richtig geschrieben, und die From-Zeile lautet so, wie sie muß: auf die eigene Adresse beim Provider.

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)...

Mutt

Diesen Hinweis schrieb mir Jan Berkel <jan.berkel@on-line.de>: In der `.muttrc` im Heimatverzeichnis muß man folgende Zeile einfügen:

    my_hdr From: foo@foonet.com (Fooname)

Damit funktioniert das Header-Rewriting.

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

Tilo Winkler <twinkler@uni-paderborn.de> hat herausbekommen, wie man dem Pine abgewöhnen kann, die From:-Zeile vollzumüllen: Man muß sich die pine-Sourcen besorgen und dann in `pine/makefile.lnx` bei den `CFLAGS` ein `-DALLOW_CHANGING_FROM` anfügen und dann neu compilieren. Dann kann man in `.pinerc` im Heimatverzeichnis folgende Zeile(n) einfügen:

    customized-hdrs=From: Mein Name <Meine@email.adresse>,
                    Reply-To: Mein Name <Meine@email.adresse>

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

Popclient ist ganz einfach einzusetzen. Man ruft es so auf:

      ~:# 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.

Hinweis: Inzwischen gibt es einen leistungsstarken Nachfolger von popclient namens fetchmail. Ich habe bisher allerdings noch keine Erfahrungen mit fetchmail gemacht.

## Gesamtkunstwerk

Eine Scriptdatei erledigt das Abholen und das Abschicken der emails. Mit etwas Glück dauert das so kurz, daß nur eine Einheit verloren geht. Etwas Kosmetik im Script erzeugt dabei einen verwertbaren Mitschnitt des fortschreitenden Transfers. Dieses Script erzeugt man als root und speichert sie in `/sbin`.

Das Script benutzt die Datei `/sbin/isdn` zum öffnen der Leitung.

    /sbin/transmail
      #!/bin/sh
      # transmail.sh: exchanges email with the provider.
      # Author:       Bernhard Hailer <dl4mhk@lrz.uni-muenchen.de>
      # Version:      4.0 (27-Jan-97)

      PATH=/sbin:/usr/sbin:/bin:/usr/bin

      . /etc/i4l.provider
      . /etc/i4l.secrets

      cd /                                # against PATH=. effect

      echo -----------------------------------------------------------------------
      echo -e "Starting mail transfer: \c"; date

      . /sbin/connect on

      echo "Checking mail server..."
      set `ping -qc5 -i1 getmail | grep transmitted`
      if [ $4 -gt 0 ]
      then
        echo ":-) Mail server online - starting mail exchange"
        echo "Sending mail..."
        sendmail -q
        echo "Again sleeping 1 sec for PPP handshaking"
        sleep 1
        echo "Fetching mail..."
        popclient -3 -u $MAIL_LOGIN -p $MAIL_PASSWD -o $MAIL_PATH getmail
        echo "Again sleeping 1 sec for PPP handshaking"
        sleep 1
      else
        echo ":-[ Sorry - mail server is down. Try later..."
      fi

      . /sbin/isdn off

      # 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!

## Let's cron!

Wer den Rechner rund um die Uhr laufen läßt, kann einen automatischen Transfer erreichen, indem er den `cron`-Dämon bemüht. Man macht dazu folgendes:

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-log

2.) Dem cron die Änderung bekannt machen.

      crontab .crontab

Den 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...