E-Mail-Server LANMailServer

IMAP, POP3 und SMTP für eigene lokale Netzwerke mit Autoresponder und E-Mail-Verteilergruppen

 

Online-Hilfe für LANMailServer

E-Mail-Server LANMailServer, eigener E-Mail-Server für lokale Netzwerke, SMTP, IMAP4, SMTP
 
 

Ein Mailfilter, kurz Milter, wird verwendet um eingehende E-Mails zu verarbeiten. Solche Milter werden von Sendmail und Postfix verwendet. In LANMailServer können eigene Milter in Form einer DLL erstellt und damit die, per SMTP, eingehenden E-Mails verändert oder komplett verworfen werden. Es können keine E-Mails verändert werden, die aus externen Postfächern abgerufen werden.

Der Dienst "LANMailServer Milter Service" wird durch LANMailServer lokal per TCP/IP mit den jeweiligen E-Mail-Daten aufgerufen, der Milter Dienst gibt die Daten an die definierten Milter DLLs weiter. Der Milter Service wird damit abgegrenzt vom LANMailServer Dienst in einem eigenen Speicherbereich ausgeführt.

 

Datei lmsmilters.ini

In der Datei lmsmilters.ini müssen eigene Milter-DLLs, mit Laufwerk, Ordner und Dateinamen, in der Section [MilterLibs] mit eindeutigen Schlüssel hinzugefügt werden. Die Datei lmsmilters.ini wird immer im LANMailServer-Programmordner gesucht.

Beispiel

[MilterLibs]
0=C:\Milters\MilterDLLTest.dll
1=C:\Milters\MilterTestDLL.dll

Eigene Milter-DLL erstellen

Wichtig: Die eigene Milter-DLL muss 32bit compiliert werden, wenn LANMailServer als 32bit verwendet wird, ansonsten muss es eine 64bit DLL sein.

Beispiel für eine Delphi-DLL im LANMailServer-Programmordner Datei MilterDLLTest.dpr.

Alle Zeichenketten sind mit dem C++ Datentyp BStr definiert. Die Initialisierung der Zeichenkette erfolgt mit der Ole2 Funktion SysAllocString, die Freigabe mit SysFreeString. Bei Zuweisung einer eigenen Zeichenkette muss der Speicher der übergebenen Zeichenkette mit SysFreeString freigegeben werden, danach mit SysAllocString neu initialisiert werden, die Freigabe erfolgt danach durch den Dienst.

Der verwendete Datentyp DWORD entspricht einem Cardinal oder auch longlong.

Die Aufrufkonvention ist immer stdcall, nicht cdecl!

Die eigene DLL muss immer die Procedure MilterInformation() exportieren.

Der Aufruf der callback-Funktionen erfolgt während der Verbindung E-Mail-Client zum Server. Dauert die Antwort zu lange, wird der Client eine Fehlermeldung ausgeben und die Verbindung trennen. Die Antwort der callback-Funktionen sollte entsprechend schnell sein, um Verbindungsabbrüche zu vermeiden. Der Milter-Dienst wartet maximal 60 Sekunden auf eine Antwort, ansonsten wird immer MilterTempfail zurückgeliefert.

 

Rückgabewerte der callback-Funktionen

MilterOK = 0x1; MilterDenied = 0x2; MilterTempfail = 0x3; 
MilterAccept = 0x1000; MilterReject = MilterAccept + 1;
MilterContinue = MilterReject + 1

 

Zu Exportierende Prozedur

procedure MilterInformation(var MilterName: BStr; 
MilterVersion: PDWORD);

Diese Prozedur dient zum Test der DLL auf Gültigkeit, die Rückgabewerte werden nicht ausgewertet.

Pointer auf BSTR MilterName, Rückgabe eines Bezeichners für der Milter, Ole2 Funktion SysAllocString verwenden, der Milter Dienst wird mit SysFreeString die Zeichenkette freigeben.

Pointer auf DWORD MilterVersion eine Version kann zurückgegeben werden.

 

Optionale Funktionen, um den Inhalt der E-Mail zu manipulieren

function callback_envfrom(const SessionHandle: DWORD; 
var mailFrom: BStr): DWORD;

Wird nach Ausführung des SMTP-Kommandos MAIL FROM: ausgeführt, Envelope Sender wird übergeben.

Eindeutiges SessionHandle wird als DWORD übergeben.

Pointer auf BSTR mailFrom, Envelope mail from wird übergeben und kann verändert werden, bei Veränderung mit SysFreeString den String freigeben, mit SysAllocString neue Zeichenkette initialisieren

Rückgabewerte

MilterAccept oder MilterContinue => Envelope mail from wird akzeptiert, etwaiger Änderungen werden übernommen

MilterDenied oder MilterReject  => Envelope mail from wird nicht akzeptiert => Annahme der E-Mail wird durch den Server verweigert

MilterTempfail => Fehler im Milter, die E-Mail wird akzeptiert

 

function callback_envrcpt (const SessionHandle: DWORD; 
var mailRcpt: BStr): DWORD;

Wird nach Ausführung des SMTP-Kommandos RCPT TO: ausgeführt.

Eindeutiges SessionHandle wird als DWORD übergeben.

Pointer auf BSTR mailRcpt, Empfänger wird übergeben und kann verändert werden, der Aufruf kann bei Cc oder BCc-E-Mails mehrfach erfolgen, bei Veränderung mit SysFreeString den String freigeben, mit SysAllocString neue Zeichenkette initialisieren

Rückgabewerte

MilterAccept oder MilterContinue => Empfänger wird akzeptiert, etwaiger Änderungen werden übernommen

MilterDenied oder MilterReject  => Empfänger wird nicht akzeptiert => Annahme der E-Mail wird durch den Server verweigert

MilterTempfail => Fehler im Milter, die E-Mail wird akzeptiert

 

function callback_header(const SessionHandle: DWORD; 
var Header: BStr): DWORD;

Wird nach kompletten Empfang der E-Mail ausgeführt (SMTP-Kommando DATA .).

Eindeutiges SessionHandle wird als DWORD übergeben.

Pointer auf BSTR Header, der komplette Header der E-Mail wird übergeben, bei Veränderung mit SysFreeString den String freigeben, mit SysAllocString neue Zeichenkette initialisieren

Rückgabewerte

MilterAccept oder MilterContinue => E-Mail wird akzeptiert, etwaiger Änderungen werden übernommen

MilterDenied oder MilterReject  => E-Mail wird nicht akzeptiert => Annahme der E-Mail wird durch den Server verweigert

MilterTempfail => Fehler im Milter, die E-Mail wird akzeptiert

 

function callback_body(const SessionHandle: DWORD; 
var Body: BStr): DWORD;

Wird nach kompletten Empfang der E-Mail ausgeführt (SMTP-Kommando DATA .).

Eindeutiges SessionHandle wird als DWORD übergeben.

Pointer auf BSTR Body, der komplette Body der E-Mail wird übergeben, bei Veränderung mit SysFreeString den String freigeben, mit SysAllocString neue Zeichenkette initialisieren

Rückgabewerte

MilterAccept oder MilterContinue => E-Mail wird akzeptiert, etwaiger Änderungen werden übernommen

MilterDenied oder MilterReject  => E-Mail wird nicht akzeptiert => Annahme der E-Mail wird durch den Server verweigert

MilterTempfail => Fehler im Milter, die E-Mail wird akzeptiert

 

function callback_abort(const SessionHandle: DWORD): DWORD;

Die Verbindung wurde abgebrochen/E-Mail wurde nicht durch den Server akzeptiert.

Eindeutiges SessionHandle wird als DWORD übergeben.

 

function callback_close(const SessionHandle: DWORD): DWORD;

Die Verbindung wurde vom Client zum Server unterbrochen.

Eindeutiges SessionHandle wird als DWORD übergeben.

 

 

 

 

Anleitung zuletzt geupdated: Sun, 30 Mar 2025 22:05:51 +0100

Anleitung als kompletten RSS-Feed: Anleitung als RSS-Feed

Erstellt mit RSSWriter https://www.rsswriter.de