Dovecut Quota Wert aus der Datenbank auslesen

david191186

Member
Vorab: Mein Mailserver funktioniert gut. Ich habe jetzt das Quota Plugin eingefügt. Ich benutze kein Postfixadmin, sondern ein selbst erstelltes Laravel Backend.
Code:
/etc/dovecot/conf.d/90-quota.conf

quota_rule = *:storage=100M

Diese Zeile bewirkt das ein Postfach maximal 100MB groß sein darf.

Code:
/etc/dovecot/conf.d/90-quota.conf

plugin {
  #quota = dirsize:User quota
  quota = maildir:User quota
  #quota = dict:User quota::proxy::quota
  #quota = fs:User quota
}

Diese Einstellung bewirkt das Dovecot den belegten Speicher aus der Mailbox zieht.
Das funktioniert auch sehr gut, und Roundcube stellt das auch gut dar.

Ich möchte jetzt einfach den Wert 100M aus meiner Datenbank auslesen. Jede Mailbox Tabelle hat eine Spalte "quota" mit einem Integer (bytes). Ich verstehe nicht, wieso das so kompliziert gemacht wird. Ich habe einige Anleitungen gefunden, sind zwar für Postfixadmin, aber macht ja nichts. Bei diesen Anleitungen wird gezeigt, das Dovecot den belegten Speicherwert immer erst in die Datenbank schreiben muss. Warum? Ich möchte doch einfach nur den Wert 100MB aus der Datenbank lesen.
In den Anleitungen soll ich umstellen auf:
Code:
quota = dict:User quota::proxy::quota

Wenn man das aber macht, dann geht gar nichts mehr. Ich möchte nur den Wert 100MB aus der Datenbank haben, und nicht komplett auf SQL umstellen, was ja blödsinn ist. Klar, der Login geht über SQL, aber den Speicherplatz Verbrauch kann doch Dovecot machen. Danke euch schonmal. ;)
 
Last edited:
Ich verstehe dein Problem nicht. Das ist doch ein Widerspruch, du will die Größe in der Datenbank speichern, aber kein SQL verwenden.
 
Ich verstehe dein Problem nicht. Das ist doch ein Widerspruch, du will die Größe in der Datenbank speichern, aber kein SQL verwenden.
Nein. Wir machen mal das Beispiel mit Postfixadmin:
Postfixadmin ist so aufgebaut, das Dovecot immer den aktuellen belegten Speicher, an die Datenbank sendet. Dafür gibt es in Postfixadmin die Tabelle Quota und Quota2. Den maximalen Storage, was jede Mailbox haben darf, speichert Postfixadmin in der Tabelle Mailbox/quota.

Ich verstehe nicht, warum Dovecot den aktuellen belegten Speicher an die Datenbank senden muss. Wozu das?
Code:
/etc/dovecot/dovecot-dict-sql.conf.ext

connect = host=localhost dbname=postfix user=postfix password=postfix123

map {
pattern = priv/quota/storage
table = quota2
username_field = username
value_field = bytes
}

map {
pattern = priv/quota/messages
table = quota2
username_field = username
value_field = messages
}

Ich verstehe den Sinn davon nicht.

Ich möchte doch nur, das Dovecot den maximalen Wert, aus der Datenbank ausließt. Den belegten Speicher zu berechnen, kann doch so bleiben.
Genau das verstehe ich nicht.
 
Genau, in der Tabelle mailbox wird die maximal erlaubte Größe der jeweiligen Mailbox gespeichert. In der Tabellen quota speichert Dovecot (und nicht Postfixadmin), wieviel davon schon belegt ist, um so beim Empfang einer neuen Mail direkt sagen zu können, ob noch genug Platz ist. Ich kenne den Programmcode von Dovecot nicht, aber zumindest theoretisch kann Dovecot mit einer einzigen SQL-Abfragen alle notwendigen Informationen ermitteln (Mailbox-Name, Speicherort auf der Festplatte, max. Größe, belegte Größe). Ansonsten würde Dovecot die Informationen aus der quota-Tabelle in einer Datei zwischenspeichern - eine zusätzliche Quelle, die abgefragt werden muss und Dovecot muss die Daten aus zwei Quellen noch zusammenführen. Für Dovecot ist es also einfacher, wenn alles in einer Datenbank gespeichert ist. Das ist doch gerade eine der Stärken von SQL-Datenbanken (Daten abfragen und kombinieren).
 
Last edited:
Ich kenne den Programmcode von Dovecot nicht, aber zumindest theoretisch kann Dovecot mit einer einzigen SQL-Abfragen alle notwendigen Informationen ermitteln (Mailbox-Name, Speicherort auf der Festplatte, max. Größe, belegte Größe). Ansonsten würde Dovecot die Informationen aus der quota-Tabelle in einer Datei zwischenspeichern - eine zusätzliche Quelle, die abgefragt werden muss und Dovecot muss die Daten aus zwei Quellen noch zusammenführen.
Ahh, jetzt verstehe ich es. Und es macht jetzt auch für mich Sinn was du geschrieben hast.:)
Da ich kein Postfixadmin verwende, muss ich jetzt also noch eine Spalte anlegen. INTEGER (Belegter Speicher in bytes). Dort soll dann der aktuelle belegte Storage Speicher gespeichert werden. Das habe ich so richtig verstanden?
 
Prinzipiell spricht nichts dagegen, das gleiche Format wie Postfixadmin zu verwenden - da hast du den Vorteil, dass es ausreichen Dokus gibt, was du in Dovecot und Postfix konfigurieren musst, damit diese die Informationen auswerten können. Ob du die Tabellen dann mit Postfixadmin befüllst oder mit was selbstgeschriebenen, ist ja egal. Ich habe anfangs mit Postfixadmin gearbeitet, mittlerweile aber viel angepasst, nicht benötigte Funktionen wie vacation und fetchmail rausgeworfen, dafür u.a. eine eigene Blacklist-Verwaltung eingebaut etc.
 
Prinzipiell spricht nichts dagegen, das gleiche Format wie Postfixadmin zu verwenden
Nein, nicht das gleiche. Meine ist auch light weight.
Code:
| id | domain_id | password | email | quota_used | quota

Ich versuche das mal, und melde mich wieder.
 
Also ich habe es hinbekommen. :) Geht jetzt alles..
@danton Du hattest geschrieben, das du Postfixadmin etwas verändert hast, bzw Funktionen hinzugefügt hast. Was sind das für Funktionen? Da ich eh gerade dabei bin, kann ich mir noch was abgucken von dir;) Ich benutze ja kein Postfixadmin, daher kann ich mir das schön zusammen basteln. Ich habe auch die Domain Quotas weggelassen, nutze nur Mailbox Quotas.
 
Naja, wie ich oben schon schrieb, habe ich ein paar Funktionen rausgeworfen, die ich nicht brauche, u.a. Fetchmail und vacation. Außerdem habe ich eine eigene kleine Blacklist laufen, die Postfix ebenfalls aus einer MySQL-Tabelle ausliest. Das ganze läuft über die smtpd_*_restrictions in Postfix und da dann check_(client|sender|helo)_access. Die Pflege der Tabelle im Browser habe ich in den Postfixadmin eingebaut, ein Cronjob läßt die Einträge, die nur vorübergehend sein sollen nach der Anzahl der angegebenen Tage wieder raus. Außerdem habe ich die Mailbox-Tabelle um zwei Flags für SMTP und IMAP erweitert - so kann ich Send-Only Accounts erstellen (theoretisch auch Receive-Only), z.B. für ein eigener die Fritzbox, damit diese ihre Pushmails versenden kann, aber keine Mailbox für den Empfang benötigt.
 
Naja, wie ich oben schon schrieb, habe ich ein paar Funktionen rausgeworfen, die ich nicht brauche, u.a. Fetchmail und vacation. Außerdem habe ich eine eigene kleine Blacklist laufen, die Postfix ebenfalls aus einer MySQL-Tabelle ausliest. Das ganze läuft über die smtpd_*_restrictions in Postfix und da dann check_(client|sender|helo)_access. Die Pflege der Tabelle im Browser habe ich in den Postfixadmin eingebaut, ein Cronjob läßt die Einträge, die nur vorübergehend sein sollen nach der Anzahl der angegebenen Tage wieder raus. Außerdem habe ich die Mailbox-Tabelle um zwei Flags für SMTP und IMAP erweitert - so kann ich Send-Only Accounts erstellen (theoretisch auch Receive-Only), z.B. für ein eigener die Fritzbox, damit diese ihre Pushmails versenden kann, aber keine Mailbox für den Empfang benötigt.
Sorry das ich erst jetzt schreibe. Das sind sehr gute Ideen die du hast. Ich werde mein neu erstelltes Postfixadmin, auch opensource machen, wenn es soweit ist.
Zu deinen Ideen, könnte man noch die Erstellung von OpendKim Key hinzufügen.
 
Back
Top