SuSE Support-Datenbank

Titel: sendmail: Offline-SMTP - Mails beim Provider abliefern

---

Übersicht ---- Stichwortsuche ---- History ---- Versionen ---- Kategorien ---- Alle Artikel
English
---

sendmail: Offline-SMTP - Mails beim Provider abliefern

Bezieht sich auf

SuSE Linux: Version ab 5.0

Frage:

Wie können Mails mit Hilfe von Sendmail und des SMTP-Protokolls an den Mailserver des Providers weiterigeleitet werden?

Vorbemerkungen:

Neu: Verzeichnis /etc/mail/

Seit SuSE 5.1 wurden alle zusätzlichen, mail-spezifischen Dateien der Übersicht halber aus dem Verzeichnis /etc/ nach /etc/mail/ verlagert.
Nicht betrofen sind die dateien /etc/aliases und die eigentliche Konfigurationsdatei von Sendmail /etc/sendmail.cf, weil diese mit einer Kompilieroption festgelegt werden muess bzw. von anderen Programmen direkt gelesen werden und diese sie dann nicht finden würden.
Ich werde versuchen im Verlauf des Artikels die relevanten Stellen entsprechend zu kennzeichnen. Lesen Sie auf jeden Fall auch die Kurzanleitung zu Sendmail unter /etc/mail.

Falls es nur darum geht einen Queue-Betrieb einzurichten und man auf die Dienste der userdb nicht angewiesen ist, reicht es seit SuSE 5.1 die folgenden Variablen in der /etc/rc.config zu setzen und anschliessend SuSEconfig aufzurufen:

SMTP="yes"
SENDMAIL_TYPE="yes"
SENDMAIL_SMARTHOST="mail.provider.de"
SENDMAIL_LOCALHOST="localhost"
SENDMAIL_RELAY=""
SENDMAIL_ARGS="-bd -om"
SENDMAIL_EXPENSIVE="yes"
SENDMAIL_NOCANONIFY="yes"

Falls darüberhinaus der Bedarf besteht die userdb zu benutzen, kann man auch das Konfigurationsscript von sendmail /sbin/conf.d/SuSEconfig.sendmail passend erweitern. Bitte aber vorsichtig! Manche Zeichen muessen dort ausmaskiert werden!

 

Lösung:

Als Vorarbeit sollte der Startscript von Sendmail, /sbin/init.d/sendmail editiert werden und der Parameter "-q30m" entfernt werden, sofern dieser dort vorhanden ist, sonst wird die Queue alle 30 Minuten automatisch geleert.

Seit SuSE 5.1 gibt es eine Variable SENDMAIL_ARGS in der /etc/rc.config, in der die Startparameter von Sendmail gesetzt werden können. Diese muessen ebenfalls beachtet werden, sonst (falls Variable nicht vorhanden oder leer) kommen die Standardparameter aus der /sbin/init.d/sendmail zum Einsatz.


I.) Das m4-Makro

Zuerst wird ein m4-Makro erstellt das eine Schablone für die eigentliche Konfigurationdatei von Sendmail darstellt.

Seit SuSE 5.1 steht Ihnen eine kommentierte Vorlage eines m4-Makros unter /etc/mail/linux.mc zur Verfügung, wovon Sie eine Kopie der Datei (z.B. /etc/mail/linux.smtp-off.mc) erstellen und diese wie unten aufgeführt anpassen können. Dabei sollten Sie die Zeile mit der include-Anweisung am Anfang der Datei übernehmen.
Alternativ ist es auch möglich direkt das Konfigurationsscript /sbin/conf.d/SuSEconfig.sendmail anzupassen, so dass es in die bei der 5.1er neue eingeführte Vorgehensweise bei der Konfiguration automatisch passt.

Bis zur SuSE 5.0 erstellen Sie eine Datei /etc/sendmail.config/cf/linux.smtp-off.mc mit dem folgenden Inhalt:

include(`../m4/cf.m4')
VERSIONID(`linux for smtp-only(offline) setup')dnl
OSTYPE(linux)dnl
define(`confDEF_USER_ID', `daemon:daemon')dnl
define(`confTRUSTED_USERS', `uucp mdom wwwrun')dnl
define(`QUEUE_DIR', `/var/mqueue')dnl
define(`PROCMAIL_MAILER_PATH', `/usr/bin/procmail')dnl
define(`confSERVICE_SWITCH_FILE',`/etc/service.switch')dnl
define(`confUSERDB_SPEC',`/etc/userdb.db')dnl
define(`confHOSTS_FILE',`/etc/hosts')dnl
define(`confSAFE_QUEUE',`True')dnl
define(`confCON_EXPENSIVE',`True')dnl
define(`SMTP_MAILER_FLAGS',`e')dnl
FEATURE(local_procmail)dnl
FEATURE(nocanonify)dnl
FEATURE(nouucp)dnl
FEATURE(nodns)dnl
FEATURE(always_add_domain)dnl
FEATURE(masquerade_envelope)dnl
MAILER(local)dnl
MAILER(procmail)dnl
MAILER(smtp)dnl
    
Die Bedeutung der einzelnen Schlüsselwörter dieses Makros können Sie der Dokumentation von Sendmail entnehmen. Ich möchte hier nur auf ein Paar eingehen:

II.) Die Konfigurationsvorlage

Jetzt wird aus Mit Hilfe des Makros die Konfigurationsvorlage generiert bzw. in ein für Sendmail verständliches Format überführt.

Da bis SuSE 5.0 hierbei die SMTP-Vorlage aus dem Sendmail-Packet von der CDROM überschrieben würde, ist es sinnvoll diese zuerst zu sichern:

mv /etc/sendmail.smtp.cf /etc/sendmail.smtp.cf.SuSE
    
und anschließend eine neue Vorlage zu erzeugen:
cd /etc/sendmail.config/cf
m4 < linux.smtp-off.mc > /etc/sendmail.smtp.cf
    
Ab SuSE 5.1 kann direkt eine Vorlage erstellt werden (wird nur noch als "fallback" benutzt).
Der Aufruf lautet hier:
cd /etc/mail/
m4 < linux.smtp-off.mc > /etc/sendmail.smtp.cf
    
Zusätzlich muss hier noch die neue Konfigurationsart abgestellt werden, damit die Vorlage auch berücksichtigt wird - es wird also der "Kompatibilitätsmodus" benutzt. Dies geschieht durch das Verschieben des Scriptes /sbin/conf.d/SuSEconfig.sendmail.
Am besten wohl nach /etc/mail/, damit es später wiedergefunden werden kann...:
mv /sbin/conf.d/SuSEconfig.sendmail /etc/mail/
    

III.) Service Switch

Als nächstes wird die Datei /etc/service.switch (bzw. /etc/mail/service.switch) mit dem folgendem Inhalt angelegt (siehe auch Artikel sendmail mit SMTP, aber ohne DNS):

hosts   files
aliases files
    
Bitte Tabulatoren zur Trennung benutzen.

III.) Userdb - Umsetzung der Email-Adressen

Nächster Schritt besteht aus dem Anlegen der Datenbank für die Zuordnung der Email-Adressen zu den lokalen Benutzernamen und vice versa. Für jeden Benutzer werden zwei Zeilen in der Text-Datei /etc/userdb (bzw. /etc/mail/userdb) mit folgender Syntax definiert:

Loginname:mailname Email-Adresse
Email-Adresse:maildrop Loginname
Beispiel:
anna:mailname anna.musterfrau@provider.de
anna.musterfrau@provider.de:maildrop anna
    
Jetzt wieder die Überführung in ein für Sendmail verständliches Format.
Bis SuSE 5.0:
makemap btree /etc/userdb.db < /etc/userdb
und entsprechend ab SuSE 5.1:
makemap btree /etc/mail/userdb.db < /etc/mail/userdb

IV.) YaST und die /etc/rc.config

Starten Sie YaST und wählen dort das Menu:
Administration des Systems ->
        Konfigurationsdatei verändern
    
In den folgenden Variablen wird das für diesen Artikel relevante Verhalten von Sendmail gesteuert. Ich setze hier direkt die passenden Werte rein - die Beschreibung und mögliche Werte sehen Sie im YaST bzw. als Kommentare in /etc/rc.config: Die hier angegebenen Zeichen = und " werden in YaST natürlich nicht eingegeben.

Bitte nach Änderungen der Datei /etc/rc.config stets das Konfigurationsscript SuSEconfig ausführen, sonst werden die neuen Einstellungen nicht wirksam - YaST tut dies automatisch.

V.) Neustart und Tests

So, das wäre im Grunde alles was die Konfiguration selbst betrifft.
Nun muss noch sendmail neu gestartet werden:
/sbin/init.d/sendmail stop
/sbin/init.d/sendmail start
    

Zuerst einen Trockenlauf mit sendmail selbst - natürlich als Benutzer aus der Userdb, hier also anna:

/usr/sbin/sendmail -bv anna.musterfrau@provider.de
    
Die Ausgabe sollte folgendermassen aussehen:
anna.musterfrau@provider.de... deliverable: mailer relay,
host mail.provider.de,user anna.musterfrau@provider.de
    
Gibt man hier noch den Parameter -d an, sieht man wie sich sendmail durch die Konfiguration durchkämpft. Interessant ist hierbei, ob es auch in der Userdb nachschaut. Es lässt sich schön mit Hilfe von grep ausfiltern:
/usr/sbin/sendmail -bv -d anna.musterfrau@provider.de | grep udbmatch
    
Es erscheint dann folgendes:
udbmatch(anna, mailname)
udbmatch ==> anna.musterfrau@provider.de
    
Klappt es nicht, stimmt etwas an der Konfiguration nicht : goto punkt I. ;-)

Nun kann man einen Probelauf wagen. Es sollte zuerst nur das kleine Programm mail oder mailx benutzt werden.
Wir versenden hier eine nicht kompromitierende Datei, bzw. in diesem speziellen Fall nur eine umgeleitete Ausgabe von uname -a.

Gestartet wird es wieder als der Benutzer, desen Loginname in der Userdb angegeben wurde. Wir schicken hier eine Mail an uns selbst:

uname -a | mailx -s "TEST Nr.1" anna.musterfrau@provider.de
    

Durch diesen Aufruf werden im Queue-Verzeichnis von Sendmail /var/mqueue (bzw. in Zukunft /var/spool/mqueue) zwei Dateien erstellt.
Die Datei, die mit df beginnt, enthällt den Messagebody, also unsere Ausgabe von uname -a.
Die dazugehörige Datei, die mit qf beginnt hingegen den wichtigen Teil - die Haeder-Informationen. Dabei sind folgende Zeilen wichtig:

$_anna@localhost
Sanna
RPFD:anna.musterfrau@provider.de
H?P?Return-Path: <anna.musterfrau@provider.de>
H?F?From: "Anna M." <anna.musterfrau@provider.de>
HTo: anna.musterfrau@provider.de
    
Stimmt es, kann gewagt werden die Mail (oder mehrere) wirklich zu verschicken (ggf. nach Aufbau der Verbingung):
sendmail -q
    
In den Logdateien /var/log/mail bzw. /var/log/messages kann man nun Statusmeldungen über den Erfolg des Sendens finden. Abholen kann man die Mail mit dem Programm Fetchmail.

Besonderheiten

Zu Beachten gilt, das dieses einfache Programm mail sich im Zusammenhang mit der Userdb wenig zum Versenden eignet, weil der Mail-Haeder beim leeren der Queue anscheinend doch nochmal umgeschrieben wird und als Return-Path der lokale Loggin- und Hostname eingetragen werden.

Es sollte deshalb eines der inteligenteren Mail-Programme wie z.B. xfmail, pine, tkmail oder gar das neue tkrat verwendet werden. Diese können sendmail die korrekte Daten entsprechend mitteilen und dieses "Fehlverhalten" tritt nicht auf.

Bei der Verwendung spezieller Mailprogramme, z.B. pine muss den Mailprogrammen beigebracht werden, daß sie die Haeder der Mail nicht selbst ausfüllen sollen (die From-Zeile).
Die einfache Form davon ist das Eintragen von localhost als SMTP-Hosts.
Bei pine 4.x kann man mit dem Setzen von allow-changing-from und anpassen von customized-hdrs auf z.B.:

      From: vorname.nachname@provider.de
die zu verwendete Email-Addresse angeben.

Alternativ können die Benutzer, die in der Userdb angegeben sind als "trusted" definiert werden.
Dies kann entweder bereits im m4-Makro bei confTRUSTED_USERS geschehen, oder in der Datei /etc/sendmail.smtp.cf eingetragen (eingehackt) werden:

#####################
#   Trusted users   #
#####################

# this is equivalent to setting class "t"
#Ft/etc/sendmail.ct
Troot
Tdaemon
Tuucp mdom wwwrun
Tanna
    
Es macht kein Sinn etwas an der Sendmail-Konfigurationsdatei /etc/sendmail.cf selbst zu ändern, weil diese bei jedem Lauf von YaST bzw. SuSEconfig neu erzeugt wird und damit alle Änderungen verloren gehen.
Falls jemand etwas direkt an der Datei per Hand "rumhacken" möchte, sollte er/sie deshalb die Vorlage /etc/sendmail.smtp.cf bei SMTP bzw. bei UUCP entsprechend /etc/sendmail.uucp.cf dazu benutzen.

Noch ein Hinweis:

Immer Tabs statt Leerzeichen verwenden (z.B. bei /etc/service.switch) um die Spalten zu trennen.

Selbst wenn's mal nicht nötig ist! Wenn sie vorausgesetzt werden, sucht man sehr sehr lange nach dem Fehler :-)

---

Siehe auch:

---

Stichwörter: MAIL, SENDMAIL, SMTP, OFFLINE

---

Kategorien: Linux , Email

---

Feedback willkommen: Send Mail to smt@suse.de (Geben Sie bitte folgendes Stichwort an: SDB-smt_sendmail)

---

Übersicht ---- Stichwortsuche ---- History ---- Versionen ---- Kategorien ---- Alle Artikel
English
---

SDB-smt_sendmail, Copyright SuSE GmbH, Nuremberg, Germany - Version: 01. Feb 1998
Impressum - Zuletzt generiert: 24. Feb 1999 12:50:59 by maddin with sdb_gen 1.00.0