maildrop: Provider Mail auf jeden Fall zustellen

PhilippH

New Member
Heyho,

ich suche eine Möglichkeit, Mails vom Provider (also mir) auf jeden Fall zustellen zu können, d.h. auch wenn maildrop mir wg. Quota-Beschränkungen verbietet das zu tun.

Normalerweise mache ich in der .mailfilter bzw. maildroprc ein "to $MAILDIR", was aber bei übergelaufenem Postfach (>= 100%) nicht meht geht. ("maildrop: maildir over quota.")

Aus diesem Grunde suche ich eine Art Skript oder kleinen MDA, der eine Mail ungeachtet der maildirsize-Datei in das Maildir schreibt.

Hat jmd einen Tipp?

Viele Grüße,
Philipp
 
Okay,

Debian Etch,
Courier-IMAP/POP mit maildirquota Erweiterung, d.h. Maildir++,
Virtuelle Nutzer à la Virtueller E-Mail Server mit Debian Sarge und Postfix - FEKDB
Postfix 2.3.8,

master.cf:
Code:
maildrop  unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail argv=/usr/bin/maildrop -f ${sender} -d ${recipient} ${user} ${nexthop}

/etc/courier/maildroprc:
Code:
...

if ( /^X-ProviderName-Msg:/:h )
{
        log "ProviderName-Msg erkannt, keine Prüfungen!"

        xfilter "grep -v -e 'X-ProviderName.*'"

        #### HIER das Problem, dass maildrop "maildir over quota" sagt
        to $DEFAULT

        #### Lösung wäre statt "to"
        # to "|/kleiner-MDA.pl $DEFAULT"

        EXITCODE = 0
        exit
}

...

Sprich, alle Mails werden zu Maildrop geleitet, und der führt dann Spam, Filteraktionen aus. Providermessages sollen von diesen Aktionen ausgeschlossen sein, damit alle ankommen.

Gruß, Ph
 
# to "|/kleiner-MDA.pl $DEFAULT"
Mein erster Gedanke wäre, an dieser Stelle dann die Email procmail weiter zu reichen. Natürlich eine Version, die bereits das Maildir-Format beherrscht. Es schert sich aber nicht um maildirsize und verändert es auch nicht.
Letzteres könnte aber auch negativ sein. Denn wenn diese nicht dazuaddierte Email abgeholt wird, wird die Größe dennoch von maildirsize abgezogen. :(
D.h. evtl. könnte das mal auf einen negativen Wert raus laufen und ich weiß nicht, wie der IMAP darauf reagieren wird. Spannend wäre es jedenfalls. :)

huschi.
 
Hallihallo,

danke für die Procmail-Lösung, ich wusste nicht das die beiden gleichzeitig auf dem System laufen können. Dachte procmail/maildrop (MDA) wär wie sendmail/postfix (MTA).

D.h. evtl. könnte das mal auf einen negativen Wert raus laufen und ich weiß nicht, wie der IMAP darauf reagieren wird. Spannend wäre es jedenfalls.

Die "maildirsize" wird von procmail nicht verändert, aber beim Abholen via POP dekrementiert. Es tritt also genau das ein, was du gesagt hast: die Summe wird negativ:

Code:
102400S
           0            0
        -843           -1

Beim nächsten Update (z.B. maildirmake -q 102400S ...) des Quotas wird das aber von maildrop (Version 2.0.2, aus dem courier-maildrop 0.53.3-5 Paket von Debian) korrigiert und ist wieder "0". Ich denke aber das die Klienten mit negativen Quotas umgehen können, Thunderbird zumindest macht keine Probleme.

Um das ganze Problem noch etwas abzumildern habe stelle ich nun zuerst via deliverquota zu und erst wenn das fehlschlägt forc?iere ich das Ganze via procmail:

# procmail installieren (hier debian)
apt-get install procmail

# zu virtuellem benutzer wechseln
su vmail

# ~/.procmailrc anlegen mit folgendem inhalt:
Code:
:0
/home/vmail/$domain/$user/

# ~/.mailfilter editieren und relativ am anfang
Code:
PROCMAIL = "/usr/bin/procmail"
DELIVERQUOTA = "/usr/sbin/deliverquota"
...
if ( /^X-ProviderName-Msg:/:h )
{
        # X-ProviderName-Header entfernen
        xfilter "grep -v -e 'X-ProviderName.*'"

        log "ProviderName Provider-Msg erkannt. Direkte Zustellung via <$DELIVERQUOTA> ..."
        cc "|$DELIVERQUOTA $DEFAULT $MAILDIRQUOTA > /dev/null"

        if ( $EXITCODE != 0 )
        {
                # vgl. courier-0.53.0/maildir/deliverquota.c und <man deliverquota>.
                # Codes: 75 = EX_TEMPFAIL, 77 = EX_NOPERM

                log "Postfach voll. Zustellung via <procmail> ..."
                cc "|$PROCMAIL user=$RECIPIENT domain=$DOMAIN"

                if ( $EXITCODE == 0 )
                {
                        log "Providermail zugestellt."

                        EXITCODE = 0
                        exit
                }
                else
                {
                        log "ERROR: Providermail konnte nicht via <procmail> zugestellt werden."
                        log "       Standardzustellung wird versucht."

                        to $DEFAULT
                }
        }
        else
        {
                log "Providermail zugestellt."

                EXITCODE=0
                exit
        }
}

Und siehe da, es funktionert (obgleich das Beispiel hier wohl selten vorkommt):

Code:
ProviderName Provider-Msg erkannt. Direkte Zustellung via </usr/sbin/deliverquota> ...
Date: Thu Apr 26 18:10:43 2007
From: "Philipp H (ProviderName)" <philipph@ProviderName.de>
Subj: Hinweis: Ihr Postfach ist zu 129% gefüllt.
!Err: |/usr/sbin/deliverquota /home/vmail/ProviderName.de/cm 20971520S > / (1162)

Postfach voll. Zustellung via <procmail> ...
Date: Thu Apr 26 18:10:43 2007
From: "Philipp H (ProviderName)" <philipph@ProviderName.de>
Subj: Hinweis: Ihr Postfach ist zu 129% gefüllt.
File: |/usr/bin/procmail user=cm domain=ProviderName.de                    (1162)

Providermail zugestellt.

Viele Grüße,
Philipp
 
Last edited by a moderator:
Back
Top